一、什么是Jso
JSOn(JavaScript Object Notation ,JS对象简谱)采用完全独立于编程语言的用文本格式来存储和表示数据的轻量级的数据交换格式。
二、JSON的作用是什么
存储和表示数据的文本格式。
三、如何编写JSON
JSON是由2个元素组成
第一个元素,json对象
格式:{数据值---键值对,}
名称:数据值---键值对
键值对中的键要有" ",键值对的值字符串和时间日期型的数据需要" "。
我们将java对象转换成json对象以后的结果。
public class Student{
private int stuid;
private String stuname;
private int stuage;
private String stuaddress;
getXXX()/setXXX()
}
Student student=new Student();
student.setStuid(1001);
student.setStuname("fxt");
student.setStuage(22);
student.setStuaddress("西安");
json对象
{"stuid":1001,"stuname":"fxt","stuage":22,"stuaddress":"西安"}
第二个元素,json数组
格式:[具体数据值/json对象]
我们将java集合/数组转换成json数组以后的结果。
public class Student{
private int stuid;
private String stuname;
private int stuage;
private String stuaddress;
getXXX()/setXXX()
}
Student stu1=new Student();
stu1.setStuid(1001);
stu1.setStuname("zhangsan");
stu1.setStuage(23);
stu1.setStuaddress("西安");
Student stu2=new Student();
stu2.setStuid(1002);
stu2.setStuname("lisi");
stu2.setStuage(24);
stu2.setStuaddress("北京");
Student stu3=new Student();
stu3.setStuid(1003);
stu3.setStuname("wangwu");
stu3.setStuage(25);
stu3.setStuaddress("上海");
List<Student> studentlist=new ArrayList<Student>();
studentlist.add(stu1);
studentlist.add(stu2);
studentlist.add(stu3);
json数组
[
{"stuid":1001,"stuname":"zhangsan","stuage":23,"stuaddress":"西安"},---stu1
{"stuid":1002,"stuname":"lisi","stuage":24,"stuaddress":"北京"},---stu2
{"stuid":1003,"stuname":"wangwu","stuage":25,"stuaddress":"上海"}---stu3
]----studentlist
java数组
String names[]={"zhangsan","lisi","wangwu"};
json数组
["zhangsan","lisi","wangwu"]
我们以后所面临的json数据都是相互嵌套的,json数组中有json对象,json对象中有json数组。
当我们得到一个极其复杂的json数据后,搞不清楚这个json数据的结构。
我们可以利用工具【https://www.json.cn/】得到明晰的json数据的结构。
四、生成JSON
1.json-simple-1.1.jar第三方的开发包生成json数据
例如:
1.1先创建要转换的student类和Myaddress类package com.wangxing.test1; import java.util.List; public class Student { private int stuid; private String stuname; private int stuage; private Myaddderss addressliast[]; public int getStuid() { return stuid; } public void setStuid(int stuid) { this.stuid = stuid; } public String getStuname() { return stuname; } public void setStuname(String stuname) { this.stuname = stuname; } public int getStuage() { return stuage; } public void setStuage(int stuage) { this.stuage = stuage; } public Myaddderss[] getAddressliast() { return addressliast; } public void setAddressliast(Myaddderss[] addressliast) { this.addressliast = addressliast; } }
package com.wangxing.test1; public class Myaddderss { private String type; private String address; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
1.2创建主方法先把student李的值和Myaddress中的值赋上,得到一个集合里面有对象和数组
package com.wangxing.test1; import java.util.ArrayList; import java.util.List; public class Mian { public static void main(String args[]){ Student student1=new Student(); student1.setStuid(1001); student1.setStuname("fxt"); student1.setStuage(22); Myaddderss stu1addderss1=new Myaddderss(); stu1addderss1.setType("工作"); stu1addderss1.setAddress("会展中心"); Myaddderss stu1addderss2=new Myaddderss(); stu1addderss2.setType("家庭地址"); stu1addderss2.setAddress("文景路"); //创建地址的集合 Myaddderss myaddderss1[]={stu1addderss1,stu1addderss2}; student1.setAddressliast(myaddderss1); Student student2=new Student(); student2.setStuid(1002); student2.setStuname("ch"); student2.setStuage(22); Myaddderss stu2addderss1=new Myaddderss(); stu2addderss1.setType("工作"); stu2addderss1.setAddress("纬一街"); Myaddderss st21addderss2=new Myaddderss(); st21addderss2.setType("家庭地址"); st21addderss2.setAddress("响塘德苑"); Myaddderss myaddderss2[]={stu2addderss1,stu1addderss2}; student2.setAddressliast(myaddderss2); //创建一个student的集合 List<Student> studentlist=new ArrayList<>(); studentlist.add(student1); studentlist.add(student2); JsonClass.createJson1(studentlist); } }
1.3创建生成Json的帮助类
package com.wangxing.test1; import java.util.List; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class JsonHelper { /** * 1.json-simple-1.1.jar第三方的开发包生成json数据 * @param studentlist */ public static void createJson1(List<Student> studentlist) { //创建studentlist对应的json数组 JSONArray studentlistArray=new JSONArray(); //遍历集合 for(Student studentObject:studentlist){ //创建student对应的json对象 JSONObject studentJsonObject=new JSONObject(); studentJsonObject.put("stuid",studentObject.getStuid()); studentJsonObject.put("stuname",studentObject.getStuname()); studentJsonObject.put("stuage",studentObject.getStuage()); //得到保存得到内部数组的JSON对象 JSONArray addressListArray=new JSONArray(); //得到student对象的myaddress数组 Myaddderss myaddress[]=studentObject.getAddressliast(); //遍历student对象的address数组 for(Myaddderss adsressObject:myaddress){ //创建接收地址的json节点对象 JSONObject adsressJsonObject=new JSONObject(); adsressJsonObject.put("type", adsressObject.getType()); adsressJsonObject.put("address",adsressObject.getAddress()); addressListArray.add(adsressJsonObject); } studentJsonObject.put("myAddress",addressListArray); studentlistArray.add(studentJsonObject); } String json=studentlistArray.toString(); System.out.println(json); } }
1.4测试,利用JSON在线解析
2.gson-2.8.0.jar第三方的开发包生成json数据
例如:package com.wangxing.test1; import java.util.List; import com.google.gson.Gson; public class JsonHelper { /** * 2.gson-2.8.0.jar第三方的开发包生成json数据 * @param studentlist */ public static void createJson2(List<Student> studentlist) { //创建gson对象 Gson gson=new Gson(); //将需要转换的集合对象(这里你需要知道集合的结构) String json=gson.toJson(studentlist); System.out.println(json); } }
3.jackson第三方的开发包生成json数据
例如:package com.wangxing.test1; import java.util.List; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class JsonHelper { /** * 3.jackson第三方的开发包生成json数据 * @param studentlist */ public static void createJson3(List<Student> studentlist) { ObjectMapper om=new ObjectMapper(); //创建一个json数据最外层的 String json="[]"; try { //读取集合将里面的值转换成字符串 json=om.writeValueAsString(studentlist); } catch (JsonProcessingException e) { e.printStackTrace(); } System.out.println(json); } }
4.拼接字符串生成json数据
例如:package com.wangxing.test1; import java.util.List; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; public class JsonHelper { /** * 4.拼接字符串生成json数据 * @param studentlist */ public static void createJson4(List<Student> studentlist) { //创建StringBuilder对象(单线程大量字符串) StringBuilder stringBuilder=new StringBuilder(); stringBuilder.append("["); for(Student studentObject:studentlist){ stringBuilder.append("{"); stringBuilder.append("\"stuid\":"+studentObject.getStuid()+","); stringBuilder.append("\"stuname\":\""+studentObject.getStuname()+"\","); stringBuilder.append("\"stuage\":"+studentObject.getStuage()+","); //得到地址的数组 Myaddderss myaddderss[]=studentObject.getAddressliast(); stringBuilder.append("["); for(Myaddderss myaddressObject:myaddderss){ stringBuilder.append("{"); stringBuilder.append("\"type\":\""+myaddressObject.getType()+"\","); stringBuilder.append("\"address\":\""+myaddressObject.getAddress()+"\","); stringBuilder.append("},"); } stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(",")); stringBuilder.append("]"); stringBuilder.append("},"); } stringBuilder.deleteCharAt(stringBuilder.lastIndexOf(",")); stringBuilder.append("]"); System.out.println(stringBuilder.toString()); } }
五、解析Json
1.json-simple-1.1.jar第三方的开发包解析json数据
例如:
1.1创建和json数据对用的接收数据的类package com.wangxing.test2; import java.util.List; public class Student { private int stuid; private String stuname; private int stuage; private Myaddderss addressliast[]; public int getStuid() { return stuid; } public void setStuid(int stuid) { this.stuid = stuid; } public String getStuname() { return stuname; } public void setStuname(String stuname) { this.stuname = stuname; } public int getStuage() { return stuage; } public void setStuage(int stuage) { this.stuage = stuage; } public Myaddderss[] getAddressliast() { return addressliast; } public void setAddressliast(Myaddderss[] addressliast) { this.addressliast = addressliast; } }
package com.wangxing.test2; public class Myaddderss { private String type; private String address; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
1.2创建解析json数据的类
package com.wangxing.test2; 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; public class JsonHelper { /** * 1.json-simple-1.1.jar第三方的开发包解析json数据 * @param filename * @return */ public static List<Student> getStudentList(String filename) throws Exception{ List<Student> studentlist=new ArrayList<Student>(); //创建JSONParser对象去读取json数据 JSONParser jsonParser=new JSONParser(); //通过JSONParser对象的方法parse读取json文件并返回JSONArray数组 JSONArray studentListArray=(JSONArray) jsonParser.parse(new FileReader(new File(filename))); //遍历得到json数组 for(int i=0;i<studentListArray.size();i++){ //创建student对象 Student student=new Student(); //得到jsonObject节点对象(可能是对象也可能是数组) JSONObject studentJsonNode=(JSONObject) studentListArray.get(i); long id=(Long) studentJsonNode.get("stuid"); int stuid=(int)id; student.setStuid(stuid); String stuname=(String) studentJsonNode.get("stuname"); student.setStuname(stuname); long age=(Long)studentJsonNode.get("stuage"); int stuage=(int)age; student.setStuage(stuage); JSONArray addressJsonArray=(JSONArray) studentJsonNode.get("addressliast"); //创建保存地址对象的数组 Myaddderss myaddderssarr[]=new Myaddderss[addressJsonArray.size()]; for(int j=0;j<addressJsonArray.size();j++){ Myaddderss myaddderss=new Myaddderss(); //得到json数组中的节点对象 JSONObject addressObject=(JSONObject) addressJsonArray.get(j); String type=(String)addressObject.get("type"); String address=(String)addressObject.get("address"); myaddderss.setType(type); myaddderss.setAddress(address); myaddderssarr[j]=myaddderss; } student.setAddressliast(myaddderssarr); studentlist.add(student); } return studentlist; } }
1.3测试
package com.wangxing.test2; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.List; public class Mian { public static void main(String args[]) throws Exception{ BufferedReader read=new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入要解析的json文件,名称+后缀名:"); String filename=read.readLine(); List<Student> studentlist=JsonHelper.getStudentList(filename); for(Student student:studentlist){ Myaddderss myaddderss[]=student.getAddressliast(); System.out.println("stuid:"+student.getStuid()+" "+"stuname:"+student.getStuname()+ " "+"stuage:"+student.getStuage()+" "+myaddderss[0].getType()+":"+myaddderss[0].getAddress()+" " +myaddderss[1].getType()+":"+myaddderss[1].getAddress()); } } }
2.gson-2.8.0.jar第三方的开发包解析json数据
例如:package com.wangxing.test2; import java.io.File; import java.io.FileReader; import java.lang.reflect.Type; import java.util.List; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; public class JsonHelper { /** * 2.gson-2.8.0.jar第三方的开发包解析json数据 * @param filename * @return * @throws Exception */ public static List<Student> getStudentList2(String filename) throws Exception{ //创建gson对象 Gson gson=new Gson(); Type type =new TypeToken<List<Student>>(){}.getType(); return gson.fromJson(new FileReader(new File(filename)), type); } }
3.jackson第三方的开发包解析json数据
例如:package com.wangxing.test2; import java.io.File; import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class JsonHelper { /** * 3.jackson第三方的开发包解析json数据 * @param filename * @return * @throws Exception */ public static List<Student> getStudentList3(String filename) throws Exception{ List<Student> studentlist=new ArrayList<Student>(); //得到ObjectMapper对象 ObjectMapper objectMapper=new ObjectMapper(); //得到jsonNode节点 JsonNode studentListArray=objectMapper.readTree(new File(filename)); for(int i=0;i<studentListArray.size();i++){ Student student=new Student(); //得到节点 JsonNode studentObject=studentListArray.get(i); int stuid=studentObject.get("stuid").asInt(); student.setStuid(stuid); String stuname=studentObject.get("stuname").asText(); student.setStuname(stuname); int stuage=studentObject.get("stuage").asInt(); student.setStuage(stuage); JsonNode addressArr=studentObject.get("addressliast"); Myaddderss myaddderssarr[]=new Myaddderss[addressArr.size()]; for(int j=0;j<addressArr.size();j++){ Myaddderss myaddderss=new Myaddderss(); JsonNode addressObject=addressArr.get(j); String type=addressObject.get("type").asText(); String address=addressObject.get("address").asText(); myaddderss.setType(type); myaddderss.setAddress(address); myaddderssarr[j]=myaddderss; } student.setAddressliast(myaddderssarr); studentlist.add(student); } return studentlist; } }