18生成和解析JSON
18生成和解析JSON
1.什么是JSON?JSON的作用?如何编写JSON?
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON是一种完全独立于编程语言的文本格式来存储和表示数据的轻量级的数据交换格式。
用我们的话说就是一套具有固定格式的用于保存或者表示数据的字符串
Json数据的组成
一个json数据是由两部分组成
1.Json对象:
用一组“{}”包围键/值对组合,键/值对组合中的键名写在前面并用双引号 “” 包裹,使用冒号 : 分隔,然后紧接着值,多个键/值对组合中间用“,”分隔。
使用“{}”包围,里面是键值对数据,键值对中的键要使用双引号包围,键与值之间用“:”分割,如果有多个键值对使用“,”分割
Json对象通常是用来保存一个java对象的。
一个java对象转换成json对象以后是什么样子?
例如:
package com.click369.test1; public class Person { private int perid; private String pername; private int perage; private String peraddress; public int getPerid() { return perid; } public void setPerid(int perid) { this.perid = perid; } public String getPername() { return pername; } public void setPername(String pername) { this.pername = pername; } public int getPerage() { return perage; } public void setPerage(int perage) { this.perage = perage; } public String getPeraddress() { return peraddress; } public void setPeraddress(String peraddress) { this.peraddress = peraddress; } }
//创建一个person类的对象
Person person1=new Person();
person1.setPerid(1001);
person1.setPername(“zhangsan”);
person1.setPerage(23);
person1.setPeraddress(“西安”);
//将person1这个java对象转换成json对象对应的字符串数据
{“perid”:1001,“pername”:“zhangsan”,“perage”:23,“peraddress”:“西安”}—json对象
2.Json数组
JSON 表示数组的方式就是是使用方括号 []。
Json数组是用来保存java数组数据/集合数据
例如:
package com.click369.test1; public class Person { private int perid; private String pername; private int perage; private String peraddress; public int getPerid() { return perid; } public void setPerid(int perid) { this.perid = perid; } public String getPername() { return pername; } public void setPername(String pername) { this.pername = pername; } public int getPerage() { return perage; } public void setPerage(int perage) { this.perage = perage; } public String getPeraddress() { return peraddress; } public void setPeraddress(String peraddress) { this.peraddress = peraddress; } }
Person person1=new Person();
person1.setPerid(1001);
person1.setPername(“zhangsan”);
person1.setPerage(23);
person1.setPeraddress(“西安”);
Person person2=new Person();
person2.setPerid(1002);
person2.setPername(“lisi”);
person2.setPerage(24);
person2.setPeraddress(“北京”);
Person person3=new Person();
person3.setPerid(1003);
person3.setPername(“wangwu”);
person3.setPerage(25);
person3.setPeraddress(“上海”);
//创建一个保存person对象的集合
List personlist=new ArrayList();
//将上面创建的3个person对象保存到集合中
personlist.add(person1);
personlist.add(person2);
personlist.add(person3);
//将保存有3个perosn对象的集合转换成json数组之后会是什么样子??
[
{“perid”:1001,“pername”:“zhangsan”,“perage”:23,“peraddress”:“西安”}, —json对象
{“perid”:1002,“pername”:“lisi”,“perage”:24,“peraddress”:“北京”}, —json对象
{“perid”:1003,“pername”:“wangwu”,“perage”:25,“peraddress”:“上海”} —json对象
] — json数组
一个json数组中保存了3个json对象
通常情况下我们所遇到的json数据都是json对象中包含json数组,json数组中又包含json对象的形式
例如:
package com.click369.test2; /** * 保存地址信息的java类 * @author Administrator * */ public class PersonAddress { private String type; //地址类型【家庭/工作】 private String info; //地址信息 public String getType() { return type; } public void setType(String type) { this.type = type; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } } package com.click369.test2; public class Person { private int perid; private String pername; private int perage; //保存地址信息的数组 private PersonAddress peraddress[]; public int getPerid() { return perid; } public void setPerid(int perid) { this.perid = perid; } public String getPername() { return pername; } public void setPername(String pername) { this.pername = pername; } public int getPerage() { return perage; } public void setPerage(int perage) { this.perage = perage; } public PersonAddress[] getPeraddress() { return peraddress; } public void setPeraddress(PersonAddress[] peraddress) { this.peraddress = peraddress; } } //创建3个person类的对象 Person person1=new Person(); person1.setPerid(1001); person1.setPername("zhangsan"); person1.setPerage(23); //创建保存地址信息的数组 PersonAddress peraddress[]=new PersonAddress[2]; //创建两个地址的对象 PersonAddress address1=new PersonAddress(); address1.setType("home"); address1.setInfo("西安"); PersonAddress address2=new PersonAddress(); address2.setType("work"); address2.setInfo("北京"); //将创建好的地址对象装入数组 peraddress[0]=address1; peraddress[1]=address2; person1.setPeraddress(peraddress); Person person2=new Person(); person2.setPerid(1002); person2.setPername("lisi"); person2.setPerage(24); //创建保存地址信息的数组 PersonAddress peraddress2[]=new PersonAddress[2]; //创建两个地址的对象 PersonAddress address21=new PersonAddress(); address21.setType("home"); address21.setInfo("上海"); PersonAddress address22=new PersonAddress(); address22.setType("work"); address22.setInfo("重庆"); //将创建好的地址对象装入数组 peraddress2[0]=address21; peraddress2[1]=address22; person2.setPeraddress(peraddress2); Person person3=new Person(); person3.setPerid(1003); person3.setPername("wangwu"); person3.setPerage(25); //创建保存地址信息的数组 PersonAddress peraddress3[]=new PersonAddress[2]; //创建两个地址的对象 PersonAddress address31=new PersonAddress(); address31.setType("home"); address31.setInfo("广州"); PersonAddress address32=new PersonAddress(); address32.setType("work"); address32.setInfo("西安"); //将创建好的地址对象装入数组 peraddress3[0]=address31; peraddress3[1]=address32; person3.setPeraddress(peraddress3); //创建一个保存person对象的集合 List<Person> personlist=new ArrayList<Person>(); //将创建的person对象存储至集合中 personlist.add(person1); personlist.add(person2); personlist.add(person3);
将上面的集合转换成json数据字符串以后是什么样子???
[
{ “perid”:1001,
“pername”:“zhangsan”,
“perage”:23,
“peraddress”:[
{“type”:“home”,“info”:“西安”},
{“type”:“work”,“info”:“北京”}
]----json数组
}, – json对象
{“perid”:1002,
“pername”:“lisi”,
“perage”:24,
“peraddress”:[
{“type”:“home”,“info”:“上海”},
{“type”:“work”,“info”:“重庆”}
]
},
{“perid”:1003,
“pername”:“wangwu”,
“perage”:25,
“peraddress”:[
{“type”:“home”,“info”:“广州”},
{“type”:“work”,“info”:“西安”}
]
}
]
2.JSON文件的生成方式和解析方式?
通过java程序生成JSON数据
1.json-simple-1.1.jar第三方的开发包生成json数据
/** * 1.json-simple-1.1.jar第三方的开发包生成json数据 * 1.1 下载json-simple的开发包 * 1.2 导入开发包 */ public static void jsonSimpleCreatejson(List<Person> personlist)throws Exception{ //创建JSONArray对象 JSONArray personlistJSONArray=new JSONArray(); //循环变变量需要生产json数据的集合 for(Person person:personlist){ //创建JSONObject对象 JSONObject personObjectJSONObject=new JSONObject(); //为这个json对象添加键值对数据 personObjectJSONObject.put("perid",person.getPerid()); personObjectJSONObject.put("pername",person.getPername()); personObjectJSONObject.put("perage",person.getPerage()); //得到保存有地址信息的数组 PersonAddress peraddresss[]=person.getPeraddress(); //创建一个保存地址数组的JSONArray对象 JSONArray personAddressJSONArray=new JSONArray(); //变量保存地址信息的数组 for(PersonAddress peraddressObj:peraddresss){ //创建保存地址信息的JSONObject对象 JSONObject peraddressJSONObject=new JSONObject(); peraddressJSONObject.put("type",peraddressObj.getType()); peraddressJSONObject.put("info", peraddressObj.getInfo()); //将保存有保存地址信息的JSONObject对象保存到保存地址数组的JSONArray对象 personAddressJSONArray.add(peraddressJSONObject); } personObjectJSONObject.put("peraddress",personAddressJSONArray); //将创建好的json对象保存到json数组中 personlistJSONArray.add(personObjectJSONObject); } //创建文件对象 File f=new File("person_json_1.txt"); //创建输出流对象 FileWriter out=new FileWriter(f); //将组织好的json数组对象转换成json字符串,通过输出流写出 out.write(personlistJSONArray.toJSONString()); out.close(); }
2.gson-2.8.0.jar第三方的开发包生成json数据
/** * 用过gson-2.8.0.jar第三方的开发包生成json数据 */ @Test public void testGsonCreateJson()throws Exception{ String jsonInfo=new Gson().toJson(JSONHelper.getPersonObjectList()); File f=new File("person2.txt"); FileWriter out=new FileWriter(f); out.write(jsonInfo); out.close(); } 3.jackson第三方的开发包生成json数据
“jackson-core-2.9.5.jar”
“jackson-databind-2.9.5.jar”
“jackson-annotations-2.9.5.jar”
/** * 用过jackson-2.9.5.jar第三方的开发包生成json数据 */ @Test public void testJackson_databindCreateJson()throws Exception{ String jsonInfo=new ObjectMapper().writeValueAsString(JSONHelper.getPersonObjectList()); File f=new File("person3.txt"); FileWriter out=new FileWriter(f); out.write(jsonInfo); out.close(); }
通过java程序解析JSON数据
1.json-simple-1.1.jar第三方的开发包解析json数据
package com.click369.test3; import java.io.File; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; /** * 专门用来解析json数据的java类 * @author Administrator * */ public class MyJson { /** * 1.json-simple-1.1.jar第三方的开发包解析json数据 * */ public static List<Person> jsonSimpleJieXiJson(File jsonfile)throws Exception{ List<Person> personList=new ArrayList<Person>(); //创建一个json解析器对象 JSONParser parser = new JSONParser(); //创建一个输入流对象 FileReader in=new FileReader(jsonfile); //将json文件解析成一个json数组 JSONArray personlistArray=(JSONArray)parser.parse(in); //遍历保存有PersonList的json数组 for(int i=0;i<personlistArray.size();i++){ //创建保存解析信息的person对象 Person person=new Person(); //从保存有personlist的json数组中得到保存person对象的json对象 JSONObject personObject=(JSONObject)personlistArray.get(i); //保存person对象的json对象中得到对应的成员变量值 long perid=(Long)personObject.get("perid"); int id=(int)perid; //保存perid到person对象中 person.setPerid(id); String pername=(String)personObject.get("pername"); //保存pername到person对象中 person.setPername(pername); long perage=(Long)personObject.get("perage"); int age=(int)perage; //保存perage到person对象中 person.setPerage(age); //从保存person对象的json对象中取出保存了地址信息的数组 JSONArray addressArray=(JSONArray)personObject.get("peraddress"); //创建一个保存地址信息的数组 PersonAddress peraddress[]=new PersonAddress[addressArray.size()]; for(int j=0;j<addressArray.size();j++){ //创建保存地址信息的对象 PersonAddress peraddressObj=new PersonAddress(); //从保存地址信息的json数组中得到保存地址信息的json对象 JSONObject addressObject=(JSONObject)addressArray.get(j); //从地址的json对象中取出地址信息 String type=(String)addressObject.get("type"); //得到得到的地址类型保存到地址对象中 peraddressObj.setType(type); String info=(String)addressObject.get("info"); //得到得到的地址信息保存到地址对象中 peraddressObj.setInfo(info); //将地址对象保存到地址数组中 peraddress[j]=peraddressObj; } //将地址数组保存到person对象中 person.setPeraddress(peraddress); //将person对象保存至集合 personList.add(person); } return personList; } }
2.gson-2.8.0.jar第三方的开发包解析json数据
/** * 2.gson-2.8.0.jar第三方的开发包解析json数据 * @throws Exception */ @Test public void gsonParserJSON()throws Exception{ JsonElement personJsonElement=(JsonElement)new JsonParser().parse(new FileReader(new File("person3.txt"))); JsonArray personArray=personJsonElement.getAsJsonArray(); for(int i=0;i<personArray.size();i++){ int perid=personArray.get(i).getAsJsonObject().get("perid").getAsInt(); String pername=personArray.get(i).getAsJsonObject().get("pername").getAsString(); int perage=personArray.get(i).getAsJsonObject().get("perage").getAsInt(); String peraddress=personArray.get(i).getAsJsonObject().get("peraddress").getAsString(); System.out.println(perid+" "+pername+" "+perage+" "+peraddress); } } 3.jackson第三方的开发包解析json数据 “jackson-core-2.9.5.jar” “jackson-databind-2.9.5.jar” “jackson-annotations-2.9.5.jar” /** * jackson第三方的开发包解析json数据 * @throws Exception */ @Test public void jacksonParserJSON()throws Exception{ JsonNode rootNode=new ObjectMapper().readTree(new File("person3.txt")); for(int i=0;i<rootNode.size();i++){ int perid=rootNode.get(i).get("perid").asInt(); String pername=rootNode.get(i).get("pername").asText(); int perage=rootNode.get(i).get("perage").asInt(); String peraddress=rootNode.get(i).get("peraddress").asText(); System.out.println(perid+" "+pername+" "+perage+" "+peraddress); } }
- JAVA基础18 生成和解析JSON
- boost生成和解析json实例及定向到文件
- linux系统下解析shell标准输出流生成json包demon
- Android Studio 自动生成 Gson bean(json解析快捷方法)
- iOS开发之JSON格式数据的生成与解析
- 使用LitJson.dll生成存储与解析Json
- 生成json文件和解析json文件
- 如何使用JSON Framework库解析与生成json数据
- 【Android网络开发の4】解析和生成JSON数据
- 通过反射生成JSON字符串,以及解析JSON字符串到对象
- @使用JSONObject生成和解析json
- Android Json的使用(2) 使用Jackson解析和生成json
- Android 利用Gson生成或解析json
- Json1:使用gson解析、生成json
- fastjson生成和解析json数据,序列化和反序列化数据
- 关于网络三 - XML 生成及解析、JSON 解析
- json的生成和解析
- fast-json 生成与解析json数据
- 阿里巴巴 fastJson 生成和解析json数据 详细说明