前言
上篇博客讲到怎么去读取本地Json文件,此博客主要深入学习Json 的使用,毕竟,不搞明白这东西,项目没法搞了。稳扎稳打,方能步步为赢。
了解Json 的人都知道,Json本质 就是一种具有特定格式的字符串,它的数据结构分为JSON对象和JSON数组。JSON是首先一种数据结构,说白了就是对数据的描述,刚刚出现是为了取代XML,可惜并没有,但是在作为配置文件上,却是很好,由于它小巧灵活,描述数据很好,所以在网络上进行数据传输更加方便。
!!!
请记住JSON对数据的描述形式,既然是形式,那么它的数据形式是什么样的:
对象的描述是: {} 这个表示jsonobject(json对象)
数组的描述是: [] 表示jsonarray(json数组)
属性或值的描述是: “”
连接之间的描述是: :
Json解析三种技术
1.android原生技术
①将Json对象转化为Java对象
一.创建或获取Json数据
//创建或获取JSON数据 String json="{\n" + "\n" + " \"id\":2,\"name\":\"小明\",\n" + "\n" + " \"phone\":\"19977443708\"\n" + "\n" + "\n" + "\n" + "}";
二.解析Json数据
try { JSONObject jsonObject = new JSONObject(json);//将Json字符串解析为Json对象 // int id = jsonObject.getInt("id"); int id = jsonObject.optInt("id"); String name = jsonObject.optString("name"); String phone = jsonObject.optString("phone"); // personInfo = new PersonInfo(id, name, phone); } catch (JSONException e) { e.printStackTrace(); }
②将Json数组转化为Java集合
一.创建或获取Json数据
String json="[{\n" + "\n" + " \"id\":1,\"name\":\"小明\",\n" + "\n" + " \"phone\":\"19977443708\"\n" + "\n" + "\n" + "\n" + "},{\n" + "\n" + " \"id\":2,\"name\":\"小芳\",\n" + "\n" + " \"phone\":\"19977449708\"\n" + "\n" + "\n" + "\n" + "}]";
二.解析Json数据
try { JSONArray jsonArray=new JSONArray(json); for(int i=0;i<jsonArray.length();i++) { JSONObject jsonObject=jsonArray.getJSONObject(i); if(jsonObject!=null) { int id = jsonObject.optInt("id"); String name = jsonObject.optString("name"); String phone = jsonObject.optString("phone"); //封装JAVA对象 PersonInfo personInfo=new PersonInfo(id, name, phone); personInfoList.add(personInfo); } } } catch (JSONException e) { e.printStackTrace(); }
③复杂Json数据解析
//获取或创建Json数据 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\"}"; // List<Character> characterList=new ArrayList<>();
try { JSONObject jsonObject3 = new JSONObject(json); String videoAlbumName=jsonObject3.optString("videoAlbumName"); String fileNameList=jsonObject3.getString("fileNameList"); JSONArray jsonArray=new JSONArray(fileNameList); for(int i=0;i<jsonArray.length();i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); if(jsonObject!=null) nameList.add(jsonObject); }
④特殊格式的Json数据解析
2.Gson技术
首先,得添加依赖。Using Gson with Gradle/Android
dependencies {
implementation 'com.google.code.gson:gson:2.10'
}
然后根据不同的类型进行不同的操作
①将json转化为java对象
private void jsonTojavaObjectByGson(){
String json="{\n" +
"\n" +
" \"id\":2,\"name\":\"小明\",\n" +
"\n" +
" \"phone\":\"19977443708\"\n" +
"\n" +
"\n" +
"\n" +
"}";
//解析数据
Gson gson = new Gson();
PersonInfo personInfo=gson.fromJson(json,PersonInfo.class);
//显示数据
textViewNative.setText(json);
textViewLast.setText(personInfo.toString());
}
②将json转化为java中 List集合
private void jsonTojavaListByGson(){
String json="[{\n" +
"\n" +
" \"id\":1,\"name\":\"小明\",\n" +
"\n" +
" \"phone\":\"19977443708\"\n" +
"\n" +
"\n" +
"\n" +
"},{\n" +
"\n" +
" \"id\":2,\"name\":\"小芳\",\n" +
"\n" +
" \"phone\":\"19977449708\"\n" +
"\n" +
"\n" +
"\n" +
"}]";
Gson gson=new Gson();
List<PersonInfo> personInfos= gson.fromJson(json, new TypeToken<List<PersonInfo>>() {
}.getType());
textViewNative.setText(json);
textViewLast.setText(personInfos.toString());
}
③ 将java转化为json对象
private void javaToJsonObjectByGson(){
//获取或创建java对象
PersonInfo personInfo=new PersonInfo(1,"小强","19934555944");
//生成json数据
Gson gson=new Gson();
String json=gson.toJson(personInfo);
//展示代码
textViewNative.setText(personInfo.toString());
textViewLast.setText(json);
}
④将java转化为json数组
private void javaToJsonArrayByGson(){
//创建java对象
List<PersonInfo> personInfos=new ArrayList<>();
PersonInfo xiaoFen=new PersonInfo(4,"小兰","17754553490");
PersonInfo xiaoLi=new PersonInfo(4,"小李","17457553490");
personInfos.add(xiaoFen);
personInfos.add(xiaoLi);
//生成json数据
Gson gson=new Gson();
String json=gson.toJson(personInfos.toString());
}
阅读:《法治的细节-152》
英语:一篇阅读+写作
高等数学:还停留在一重积分