main.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "jsondemo"
  3. VERSION = "1.0.0"
  4. -- 引入必要的库文件(lua编写), 内部库不需要require
  5. sys = require("sys")
  6. log.info("main", PROJECT, VERSION)
  7. -- json库支持将 table 转为 字符串, 或者反过来, 字符串 转 table
  8. -- 若转换失败, 会返回nil值, 强烈建议在使用时添加额外的判断
  9. sys.taskInit(function()
  10. while 1 do
  11. sys.wait(1000)
  12. -- table 转为 字符串
  13. local t = {abc=123, def="123", ttt=true}
  14. local jdata = json.encode(t)
  15. log.info("json", jdata)
  16. -- 字符串转table
  17. local str = "{\"abc\":1234545}" -- 字符串可以来源于任何地方,网络,文本,用户输入,都可以
  18. local t = json.decode(str)
  19. if t then -- 若解码失败, 会返回nil
  20. log.info("json", "decode", t.abc)
  21. end
  22. -- lua中的table是 数组和hashmap的混合体
  23. -- 这对json来说会有一些困扰, 尤其是空的table
  24. local t = {abc={}}
  25. -- 假设从业务上需要输出 {"abc":[]}
  26. -- 实际会输出 {"abc": {}} , 空table是优先输出 hashmap 形式, 而非数组形式
  27. log.info("json", "encode", json.encode(t))
  28. -- 混合场景, json场景应避免使用
  29. t.abc.def = "123"
  30. t.abc[1] = 345
  31. -- 输出的内容是 {"abc":{"1":345,"def":"123"}}
  32. log.info("json", "encode2", json.encode(t))
  33. -- 浮点数演示
  34. -- 默认%.7g
  35. log.info("json", json.encode({abc=1234.300}))
  36. -- 限制小数点到1位
  37. log.info("json", json.encode({abc=1234.300}, "1f"))
  38. -- 2023.6.8 处理\n在encode之后变成\b的问题
  39. local tmp = "ABC\r\nDEF\r\n"
  40. local tmp2 = json.encode({str=tmp})
  41. log.info("json", tmp2)
  42. local tmp3 = json.decode(tmp2)
  43. log.info("json", "tmp3", tmp3.str, tmp3.str == tmp)
  44. -- break
  45. log.info("json.null", json.encode({name=json.null}))
  46. log.info("json.null", json.decode("{\"abc\":null}").abc == json.null)
  47. log.info("json.null", json.decode("{\"abc\":null}").abc == nil)
  48. -- 测试浮点数的解码和编码
  49. local tmp = "{\"abc\":3.5}"
  50. local abc, err = json.decode(tmp)
  51. log.info("json浮点数测试", abc, err, abc.abc, abc.abc == 3.5)
  52. log.info("json浮点数测试", json.encode({abc=3.5}, "1f"))
  53. log.info("json浮点数测试", json.encode(abc, "1f"))
  54. log.info("json浮点数测试", string.format("%1f", abc.abc))
  55. log.info("json浮点数测试", string.format("%7g", abc.abc))
  56. -- log.info("json浮点数测试", string.format("%d", abc.abc))
  57. local tmp = abc.abc
  58. local tmp3 = 3.5
  59. local tmp2 = tostring(tmp)
  60. log.info("json浮点数测试", abc, err, abc.abc, tmp, tmp2, tostring(tmp3))
  61. -- 以下代码仅64bit固件可正确运行
  62. local tmp = [[{ "timestamp": 1691998307973}]]
  63. local abc, err = json.decode(tmp)
  64. log.info("json", abc, err)
  65. log.info("json", abc and abc.timestamp)
  66. break
  67. end
  68. end)
  69. -- 用户代码已结束---------------------------------------------
  70. -- 结尾总是这一句
  71. sys.run()
  72. -- sys.run()之后后面不要加任何语句!!!!!