经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JSON » 查看文章
【HarmonyOS】【Json解析】ZSON 与 HiJson 使用
来源:cnblogs  作者:萌狼蓝天  时间:2021/12/15 8:50:25  对本文有异议

HiLog配置

为了方便调试,查看,先设置好Hilog

  1. public static final HiLogLabel loglabel = new HiLogLabel(HiLog.LOG_APP,0x11102,"【xrilang】");

ZSONObject

  1. //Json测试2:使用ZSONObject(官方)
  2. // 1.将总Json字符串转为一个ZSONObject
  3. ZSONObject zsonObject1 = ZSONObject.stringToZSON(str);
  4. // 2.将所需要的内容从ZSONObject对象中取出
  5. //// 2.1 当所需要的内容是数组时
  6. ////// 2.1.1 将所需数组内容 从 ZSONObject 中取出来 转换为 ZSONArray 得到的是一个新Json
  7. ZSONArray result1 = zsonObject1.getZSONArray("lives");
  8. ////// 2.1.2 将这个新Json转为字符串输出看效果
  9. String result2 = result1.getString(0);
  10. HiLog.info(loglabel,"【ZSONObjec】result2::"+result2);
  11. //////// 【输出结果】 {"adcode":"130500","city":"邢台市","humidity":"98","province":"河北","reporttime":"2020-09-26 21:58:34","temperature":"17","weather":"多云","winddirection":"北","windpower":"≤3"}
  12. ////-------
  13. ZSONObject zsonObject2 = ZSONObject.stringToZSON(result2);
  14. ////-------
  15. //// 2.2 当需要的内容是 普通数据类型时(例如String,int,double等)
  16. ////// 2.2.1 将所需内容取出,并存放在变量中,输出查看效果
  17. String result3 = zsonObject2.getString("province");
  18. HiLog.info(loglabel,"【ZSONObjec】result3::"+result3);

image.png

HiJson(第三方)

获取与配置Json

获取HiJson

crazycodeboy/hijson: HiJson is a lightweight JSON parsing library that can be used for HarmonyOS, Android, and Java (github.com)

点击上方链接,复制如下图的红框内容

image.png

  1. implementation 'org.devio.hi.json:hijson:1.0.0'

配置到项目文件中

image.png

HiJson使用

准备好一段Json

  1. jsonString
  2. {
  3. "status": "1",
  4. "count": "1",
  5. "info": "OK",
  6. "infocode": "10000",
  7. "lives": [
  8. {
  9. "province": "河北",
  10. "city": "邢台市",
  11. "adcode": "130500",
  12. "weather": "多云",
  13. "temperature": "17",
  14. "winddirection": "北",
  15. "windpower": "≤3",
  16. "humidity": "98",
  17. "reporttime": "2020-09-26 21:58:34"
  18. }
  19. ]
  20. }

image.png

导入HiJson包

  1. import org.devio.hi.json.HiJson;

使用HiJson

  1. //Json测试1:使用HiJson(第三方)
  2. HiJson hiJson = new HiJson(str).get("lives").get(0);
  3. String province = hiJson.value("province");
  4. String city = hiJson.value("city");
  5. HiLog.info(loglabel,"【HiJson】省市:"+province+" 城市:"+city);

执行结果

image.png

完整代码

MainAbility.java

  1. package cc.mllt.eduxiancheng.slice;
  2. import cc.mllt.eduxiancheng.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.hiviewdfx.HiLog;
  6. import ohos.hiviewdfx.HiLogLabel;
  7. import ohos.utils.zson.ZSONArray;
  8. import ohos.utils.zson.ZSONObject;
  9. import org.devio.hi.json.HiJson;
  10. public class MainAbilitySlice extends AbilitySlice {
  11. String str = "{\n" +
  12. " \"status\": \"1\",\n" +
  13. " \"count\": \"1\",\n" +
  14. " \"info\": \"OK\",\n" +
  15. " \"infocode\": \"10000\",\n" +
  16. " \"lives\": [\n" +
  17. " {\n" +
  18. " \"province\": \"河北\",\n" +
  19. " \"city\": \"邢台市\",\n" +
  20. " \"adcode\": \"130500\",\n" +
  21. " \"weather\": \"多云\",\n" +
  22. " \"temperature\": \"17\",\n" +
  23. " \"winddirection\": \"北\",\n" +
  24. " \"windpower\": \"≤3\",\n" +
  25. " \"humidity\": \"98\",\n" +
  26. " \"reporttime\": \"2020-09-26 21:58:34\"\n" +
  27. " }\n" +
  28. " ]\n" +
  29. "}";
  30. public static final HiLogLabel loglabel = new HiLogLabel(HiLog.LOG_APP,0x11102,"【xrilang】");
  31. @Override
  32. public void onStart(Intent intent) {
  33. super.onStart(intent);
  34. super.setUIContent(ResourceTable.Layout_ability_main);
  35. //线程测试
  36. MyExecutor.runChild(new Runnable() {
  37. @Override
  38. public void run() {
  39. HiLog.info(loglabel,"MyExecutor:在异步线程执行任务开始");
  40. //Json测试1:使用HiJson(第三方)
  41. HiJson hiJson = new HiJson(str).get("lives").get(0);
  42. String province = hiJson.value("province");
  43. String city = hiJson.value("city");
  44. HiLog.info(loglabel,"【HiJson】省市:"+province+" 城市:"+city);
  45. //Json测试2:使用ZSONObject(官方)
  46. // 1.将总Json字符串转为一个ZSONObject
  47. ZSONObject zsonObject1 = ZSONObject.stringToZSON(str);
  48. // 2.将所需要的内容从ZSONObject对象中取出
  49. //// 2.1 当所需要的内容是数组时
  50. ////// 2.1.1 将所需数组内容 从 ZSONObject 中取出来 转换为 ZSONArray 得到的是一个新Json
  51. ZSONArray result1 = zsonObject1.getZSONArray("lives");
  52. ////// 2.1.2 将这个新Json转为字符串输出看效果
  53. String result2 = result1.getString(0);
  54. HiLog.info(loglabel,"【ZSONObjec】result2::"+result2);
  55. //////// 【输出结果】 {"adcode":"130500","city":"邢台市","humidity":"98","province":"河北","reporttime":"2020-09-26 21:58:34","temperature":"17","weather":"多云","winddirection":"北","windpower":"≤3"}
  56. ////-------
  57. ZSONObject zsonObject2 = ZSONObject.stringToZSON(result2);
  58. ////-------
  59. //// 2.2 当需要的内容是 普通数据类型时(例如String,int,double等)
  60. ////// 2.2.1 将所需内容取出,并存放在变量中,输出查看效果
  61. String result3 = zsonObject2.getString("province");
  62. HiLog.info(loglabel,"【ZSONObjec】result3::"+result3);
  63. HiLog.info(loglabel,"MyExecutor:在异步线程执行任务结束");
  64. MyExecutor.runMain(new Runnable() {
  65. @Override
  66. public void run() {
  67. HiLog.info(loglabel,"MyExecutor:回到Main线程执行任务");
  68. }
  69. });
  70. }
  71. });
  72. }
  73. @Override
  74. public void onActive() {
  75. super.onActive();
  76. }
  77. @Override
  78. public void onForeground(Intent intent) {
  79. super.onForeground(intent);
  80. }
  81. }

运行结果

image.png

MyExecutor.java

  1. package cc.mllt.eduxiancheng.slice;
  2. import ohos.eventhandler.EventHandler;
  3. import ohos.eventhandler.EventRunner;
  4. public class MyExecutor {
  5. /**
  6. * 切换任务到主线程执行
  7. * @param runnable
  8. */
  9. public static void runMain(Runnable runnable) {
  10. //切换到主线程
  11. EventRunner runner = EventRunner.getMainEventRunner();
  12. EventHandler eventHandler = new EventHandler(runner);
  13. //执行任务
  14. eventHandler.postSyncTask(runnable);
  15. }
  16. /**
  17. * 在子线程执行任务
  18. * @param runnable
  19. */
  20. public static void runChild(Runnable runnable) {
  21. //开启一个新线程
  22. EventRunner runner = EventRunner.create(true);
  23. EventHandler eventHandler = new EventHandler(runner);
  24. //执行任务
  25. eventHandler.postTask(runnable,0,EventHandler.Priority.IMMEDIATE);
  26. }
  27. }

相关文章:【HarmonyOS】【多线程与并发】EventHandler - 萌狼蓝天 - 博客园 (cnblogs.com/mllt)

作者:萌狼蓝天,转载请注明原文链接:https://www.cnblogs.com/mllt/p/HarmonyOS_edu_note_JSON_Zson_HiJson.html | 萌狼蓝天@哔哩哔哩 | QQ:3447902411(仅限技术交流,添加请说明方向)

原文链接:http://www.cnblogs.com/mllt/p/HarmonyOS_edu_note_JSON_Zson_HiJson.html

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号