如果是springboot工程中解析JSON字符串请点击下面链接:
https://blog.csdn.net/tangshiyilang/article/details/134275828
如果不是springboot工程或项目中使用的fastjson请继续向下看
1、什么是JSON字符串?
我们在理解json的时候,不必要过分的解读json到底是哪几个字母的简称,要了解本质。
JSON的本质就是字符串,字符串几乎所有的系统都支持,所以json的兼容性好。
JSON就是一种数据的承载方式,可用于不同平台之间的数据交互类型,因为几乎所有的语言都支持JSON的创建和解析。
如:Java是面向对象的,C是面向过程的,如何Java发送一个对象给C,C就不能够识别什么是对象,或者识别的代价特别的大。
2、JSON字符串的格式?
简单的JSON字符串:{"key":"value","key":"value"......} 如:{"id":"1001","name":"晓春","sex":"男"}
JSON数组:[{"key":"value","key":"value"......},{},{}]
复杂的JSON字符串:值本身还是一个json字符串, 如:{"id":"1001","name":"晓春","sex":"男","hobby":{"hobby1":"游泳","hobby2":"打篮球"}},我们能够发现hobby对应的值依旧是一个json字符串({"hobby1":"游泳","hobby2":"打篮球"}),这种就是复杂的json字符串。
3、JSON字符串的解析方式?
我们使用官方提供的JSONArray与JSONObject
第一步:导入相关的包,包我放在了百度云盘中,可以通过如下地址下载
链接:https://pan.baidu.com/s/1FQ6pDlYzwmhmViXcN9PZ6Q
提取码:ocfz
第二步:创建如下复杂的json字符串
String params="{'students':[{'stu_id':'1001','stu_name':'十一郎'},"
+ "{'stu_id':'1002','stu_name':'十二郎'}],'flag':'1',"
+ "'teacher':{'tea_id':'2001','tea_name':'晓春'}}";
说明:解析的时候会出现三种类型的数据,字符串类型的flag,Student对象和Teacher对象,所以需要创建Student对象和Teacher对象,具体创建如下:
第三步:创建Student和Teacher对象
说明:需要设置属性的set和get方法及有参数和无参数的构造器
public class Student {
private String stu_id;
private String stu_name;
public String getStu_id() {
return stu_id;
}
public void setStu_id(String stu_id) {
this.stu_id = stu_id;
}
public String getStu_name() {
return stu_name;
}
public void setStu_name(String stu_name) {
this.stu_name = stu_name;
}
public Student(String stu_id, String stu_name) {
super();
this.stu_id = stu_id;
this.stu_name = stu_name;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
}
public class Teacher {
private String tea_id;
private String tea_name;
public String getTea_id() {
return tea_id;
}
public void setTea_id(String tea_id) {
this.tea_id = tea_id;
}
public String getTea_name() {
return tea_name;
}
public void setTea_name(String tea_name) {
this.tea_name = tea_name;
}
public Teacher(String tea_id, String tea_name) {
super();
this.tea_id = tea_id;
this.tea_name = tea_name;
}
public Teacher() {
super();
// TODO Auto-generated constructor stub
}
}
第四步:具体解析步骤如下
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class Test {
public static void main(String[] args) {
//{"id":"1001","name":"晓春","sex":"男","hobby":{"hobby1":"游泳","hobby2":"打篮球"}}
String params="{'students':[{'stu_id':'1001','stu_name':'十一郎'},"
+ "{'stu_id':'1002','stu_name':'十二郎'}],'flag':'1',"
+ "'teacher':{'tea_id':'2001','tea_name':'晓春'}}";
//通过fromObject将json字符串翻译成JSON对象(JSONObject)
JSONObject jsonObject = JSONObject.fromObject(params);
//假如返回值为简单的类型,也就是单个值,使用getString("key")获取
String flag=jsonObject.getString("flag");//结果就是简单的值类型
System.out.println("===flag值为==="+flag);
//如果结果是一个json对象,使用getJSONObject("key")
JSONObject teacherObject=jsonObject.getJSONObject("teacher");
//通过toBean方法将json字符串翻译成java中的Teaher对象并打印出结果
Teacher tea = (Teacher) JSONObject.toBean(teacherObject, Teacher.class);
System.out.println("=====老师的名字====="+tea.getTea_name());
//如果返回值为多个对象组成的json数组,使用getJSONArray("key")
//上面的students类型就是json数组如:students:[{},{},{}]
JSONArray studentsjsonArray = jsonObject.getJSONArray("students");//返回的是非单一的json对象
//通过循环遍历数据
for (int i=0;i<studentsjsonArray.length();i++) {
//将获取的单个json字符串翻译成JSONObject
JSONObject a=JSONObject.fromObject(studentsjsonArray.get(i).toString());
//将json对象翻译成Student对象
Student stu = (Student) JSONObject.toBean(a, Student.class);
//打印出学生的姓名
System.out.println("=====学生姓名====="+stu.getStu_name());
}
}
}
打印结果如下:
===flag值为===1
=====老师的名字=====晓春
=====学生姓名=====十一郎
=====学生姓名=====十二郎
4、其他解释
a、JSONArray常见方法
fromArray(Object[] array):通过一个array数组创建JSONArray对象
fromCollection(Collection collection):通过collection集合对象创建JSONArray对象
fromString(String string):通过一个json格式的字符串构造一个JSONArray对象
toString():把JSONArray对象转换为json格式的字符串
b、JSONObject常见方法
fromBean(Object bean):通过一个对象创建一个JSONObject对象
fromJSONObject(JSONObject object):通过另外一个JSONObject对象构造一个JSONObject对象
fromJSONString(JSONString string:通过一个JSONString创建一个JSONObject对象
toString():把JSONObject对象转换为json格式的字符串