当前位置:   article > 正文

Json的三种解析技术_json解析

json解析

前言

上篇博客讲到怎么去读取本地Json文件,此博客主要深入学习Json 的使用,毕竟,不搞明白这东西,项目没法搞了。稳扎稳打,方能步步为赢。

了解Json 的人都知道,Json本质 就是一种具有特定格式的字符串,它的数据结构分为JSON对象和JSON数组。JSON是首先一种数据结构,说白了就是对数据的描述,刚刚出现是为了取代XML,可惜并没有,但是在作为配置文件上,却是很好,由于它小巧灵活,描述数据很好,所以在网络上进行数据传输更加方便。

!!!
请记住JSON对数据的描述形式,既然是形式,那么它的数据形式是什么样的:
对象的描述是: {} 这个表示jsonobject(json对象)
数组的描述是: [] 表示jsonarray(json数组)
属性或值的描述是: “”
连接之间的描述是: :

Json解析三种技术

1.android原生技术

①将Json对象转化为Java对象

一.创建或获取Json数据

  1. //创建或获取JSON数据
  2. String json="{\n" +
  3. "\n" +
  4. " \"id\":2,\"name\":\"小明\",\n" +
  5. "\n" +
  6. " \"phone\":\"19977443708\"\n" +
  7. "\n" +
  8. "\n" +
  9. "\n" +
  10. "}";

二.解析Json数据 

  1. try {
  2. JSONObject jsonObject = new JSONObject(json);//将Json字符串解析为Json对象
  3. // int id = jsonObject.getInt("id");
  4. int id = jsonObject.optInt("id");
  5. String name = jsonObject.optString("name");
  6. String phone = jsonObject.optString("phone");
  7. // personInfo = new PersonInfo(id, name, phone);
  8. } catch (JSONException e) {
  9. e.printStackTrace();
  10. }

②将Json数组转化为Java集合

一.创建或获取Json数据

  1. String json="[{\n" +
  2. "\n" +
  3. " \"id\":1,\"name\":\"小明\",\n" +
  4. "\n" +
  5. " \"phone\":\"19977443708\"\n" +
  6. "\n" +
  7. "\n" +
  8. "\n" +
  9. "},{\n" +
  10. "\n" +
  11. " \"id\":2,\"name\":\"小芳\",\n" +
  12. "\n" +
  13. " \"phone\":\"19977449708\"\n" +
  14. "\n" +
  15. "\n" +
  16. "\n" +
  17. "}]";

二.解析Json数据  

  1. try {
  2. JSONArray jsonArray=new JSONArray(json);
  3. for(int i=0;i<jsonArray.length();i++)
  4. {
  5. JSONObject jsonObject=jsonArray.getJSONObject(i);
  6. if(jsonObject!=null) {
  7. int id = jsonObject.optInt("id");
  8. String name = jsonObject.optString("name");
  9. String phone = jsonObject.optString("phone");
  10. //封装JAVA对象
  11. PersonInfo personInfo=new PersonInfo(id, name, phone);
  12. personInfoList.add(personInfo);
  13. }
  14. }
  15. } catch (JSONException e) {
  16. e.printStackTrace();
  17. }

③复杂Json数据解析

  1. //获取或创建Json数据
  2. String json="{\"fileNameList\":[\"丛.mp4\",\"乐.mp4\",\"乡.mp4\",\"书.mp4\",\"云.mp4\",\"井.mp4\",\"京.mp4\",\"人.mp4\",\"休.mp4\",\"伞.mp4\",\"光.mp4\",\"农.mp4\",\"动.mp4\",\"化.mp4\",\"去.mp4\",\"友.mp4\",\"叶.mp4\",\"喜.mp4\",\"园.mp4\",\"坐.mp4\",\"墙.mp4\",\"夏.mp4\",\"奔.mp4\",\"女.mp4\",\"妈.mp4\",\"学.mp4\",\"守.mp4\",\"家.mp4\",\"尾.mp4\",\"岁.mp4\",\"工.mp4\",\"巴.mp4\",\"巾.mp4\",\"帆.mp4\",\"广.mp4\",\"床.mp4\",\"弓.mp4\",\"归.mp4\",\"彩.mp4\",\"心.mp4\",\"忙.mp4\",\"思.mp4\",\"情.mp4\",\"扇.mp4\",\"打.mp4\",\"扬.mp4\",\"教.mp4\",\"明.mp4\",\"朋.mp4\",\"望.mp4\",\"杉.mp4\",\"来.mp4\",\"果.mp4\",\"树.mp4\",\"桑.mp4\",\"梦.mp4\",\"棉.mp4\",\"植.mp4\",\"止.mp4\",\"比.mp4\",\"毛.mp4\",\"水.mp4\",\"河.mp4\",\"清.mp4\",\"熊.mp4\",\"爸.mp4\",\"牙.mp4\",\"玩.mp4\",\"瓜.mp4\",\"电.mp4\",\"男.mp4\",\"看.mp4\",\"秤.mp4\",\"稻.mp4\",\"窗.mp4\",\"窝.mp4\",\"笑.mp4\",\"篮.mp4\",\"米.mp4\",\"粽.mp4\",\"羽.mp4\",\"翔.mp4\",\"肚.mp4\",\"舌.mp4\",\"舟.mp4\",\"苗.mp4\",\"草.mp4\",\"菜.mp4\",\"虫.mp4\",\"谷.mp4\",\"走.mp4\",\"足.mp4\",\"遇.mp4\",\"采.mp4\",\"量.mp4\",\"门.mp4\",\"队.mp4\",\"雨.mp4\",\"雷.mp4\",\"面.mp4\",\"飞.mp4\",\"饭.mp4\",\"马.mp4\",\"鼓.mp4\",\"龟.mp4\"],\"videoAlbumName\":\"douyin_video\"}";
  3. // List<Character> characterList=new ArrayList<>();
  1. try {
  2. JSONObject jsonObject3 = new JSONObject(json);
  3. String videoAlbumName=jsonObject3.optString("videoAlbumName");
  4. String fileNameList=jsonObject3.getString("fileNameList");
  5. JSONArray jsonArray=new JSONArray(fileNameList);
  6. for(int i=0;i<jsonArray.length();i++)
  7. {
  8. JSONObject jsonObject = jsonArray.getJSONObject(i);
  9. if(jsonObject!=null)
  10. nameList.add(jsonObject);
  11. }

④特殊格式的Json数据解析

2.Gson技术

首先,得添加依赖。Using Gson with Gradle/Android

  1. dependencies {
  2. implementation 'com.google.code.gson:gson:2.10'
  3. }

 然后根据不同的类型进行不同的操作

①将json转化为java对象

  1. private void jsonTojavaObjectByGson(){
  2. String json="{\n" +
  3. "\n" +
  4. " \"id\":2,\"name\":\"小明\",\n" +
  5. "\n" +
  6. " \"phone\":\"19977443708\"\n" +
  7. "\n" +
  8. "\n" +
  9. "\n" +
  10. "}";
  11. //解析数据
  12. Gson gson = new Gson();
  13. PersonInfo personInfo=gson.fromJson(json,PersonInfo.class);
  14. //显示数据
  15. textViewNative.setText(json);
  16. textViewLast.setText(personInfo.toString());
  17. }

②将json转化为java中 List集合 

  1. private void jsonTojavaListByGson(){
  2. String json="[{\n" +
  3. "\n" +
  4. " \"id\":1,\"name\":\"小明\",\n" +
  5. "\n" +
  6. " \"phone\":\"19977443708\"\n" +
  7. "\n" +
  8. "\n" +
  9. "\n" +
  10. "},{\n" +
  11. "\n" +
  12. " \"id\":2,\"name\":\"小芳\",\n" +
  13. "\n" +
  14. " \"phone\":\"19977449708\"\n" +
  15. "\n" +
  16. "\n" +
  17. "\n" +
  18. "}]";
  19. Gson gson=new Gson();
  20. List<PersonInfo> personInfos= gson.fromJson(json, new TypeToken<List<PersonInfo>>() {
  21. }.getType());
  22. textViewNative.setText(json);
  23. textViewLast.setText(personInfos.toString());
  24. }

③ 将java转化为json对象

  1. private void javaToJsonObjectByGson(){
  2. //获取或创建java对象
  3. PersonInfo personInfo=new PersonInfo(1,"小强","19934555944");
  4. //生成json数据
  5. Gson gson=new Gson();
  6. String json=gson.toJson(personInfo);
  7. //展示代码
  8. textViewNative.setText(personInfo.toString());
  9. textViewLast.setText(json);
  10. }

④将java转化为json数组 

  1. private void javaToJsonArrayByGson(){
  2. //创建java对象
  3. List<PersonInfo> personInfos=new ArrayList<>();
  4. PersonInfo xiaoFen=new PersonInfo(4,"小兰","17754553490");
  5. PersonInfo xiaoLi=new PersonInfo(4,"小李","17457553490");
  6. personInfos.add(xiaoFen);
  7. personInfos.add(xiaoLi);
  8. //生成json数据
  9. Gson gson=new Gson();
  10. String json=gson.toJson(personInfos.toString());
  11. }

 阅读:《法治的细节-152》

英语:一篇阅读+写作

高等数学:还停留在一重积分

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/351678
推荐阅读
相关标签
  

闽ICP备14008679号