目录
前言
数据传输数据格式,从前使用过XML数据格式,现在嘛很多时候会遇到JSON。
返回的 json格式数据:
{
"code": "1",
"msg": "成功",
"biz_data": {
"code": 200,
"data": {
"resultData": {
"list": [
{
"aa001": 10004,
"aa002": "张三",
"aa003": 15
},
{
"aa001": 10005,
"aa002": "李四",
"aa003": 20
}
]
}
}
}
}
// 说明:json格式数据以 key-value 形式组成,key不能重复,可以是对象{},数组列表[]混合组成。 // 序列化:将对象转化为可供传输的数据格式。 // 反序列化:将可供传输的数据格式转化为对象。
一、创建JSONObject对象
// 构造方法: // public JSONObject() // public JSONObject(Map<String, Object> map) // 成员方法: // public Object put(String key, Object value) // public void putAll(Map<? extends String, ? extends Object> m)
示例代码:
// 定义Map集合对象,Map是一个 key-value 的集合对象,key不能重复,每个键最多只能映射到一个值。
Map<String, Object> map = new HashMap<>();
map.put("k_name", "张三"); //使用Map的put存值
map.put("k_sex", "男"); //使用Map的put存值
map.put("k_name", "李四"); //使用Map的put存值,重复使用k_name,值会被覆盖,李四覆盖张三
//构造方法传值
JSONObject gzff_json = new JSONObject(map);
System.out.println("一,gzff_json:" + gzff_json);
gzff_json.put("k_age", "30"); //使用JSONObject的put方法
System.out.println("二,gzff_json:" + gzff_json);
JSONObject obj_json = new JSONObject();
obj_json.put("work","程序猿"); // 继续添加新值
obj_json.putAll(map); // 使用 putAll 方法
System.out.println("三, obj_json:" + obj_json);
控制台打印结果:
二、JSON格式的字符串与JSONObject对象相互转换
// 成员方法: // String转JSONObject对象:public static JSONObject parseObject(String text) // JSONObject对象转String:public static String toJSONString(Object object, SerializerFeature... features)
示例代码:
String jsonStr="{\"code\":\"1\",\"msg\":\"成功\",\"biz_data\":{\"code\":200,\"data\":{\"resultData\":{\"list\":[{\"aa001\":10004,\"aa002\":\"张三\",\"aa003\":15},{\"aa001\":10005,\"aa002\":\"李四\",\"aa003\":20}]}}}}";
//字符串转json对象
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println("字符串转json对象 jsonObject: "+jsonObject);
//json对象转字符串
String jsonString = JSON.toJSONString(jsonObject);
System.out.println("json对象转字符串 jsonString: "+jsonString);
控制台打印结果:
字符串转json对象 jsonObject: {"msg":"成功","code":"1","biz_data":{"code":200,"data":{"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}}}
json对象转字符串 jsonString: {"msg":"成功","code":"1","biz_data":{"code":200,"data":{"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}}}
三、获取key的值
// 常用的成员方法: // 获取Object类型的值:public Object get(Object key) // 获取JSONObject类型的值:public JSONObject getJSONObject(String key) // 获取String类型的值:public String getString(String key) // 获取Integer类型的值:public Integer getInteger(String key)
示例代码:
// 获取 二, 步中的 jsonStr 中的值。jsonObject对象 二,步中已经实例化
Object obj=jsonObject.get("biz_data"); // 可以获取 msg 的值
System.out.println("--- 一, 获取biz_data对象的值: "+obj);
JSONObject jObject=jsonObject.getJSONObject("biz_data"); // 获取 msg 的值报错
System.out.println("--- 二, 获取biz_data对象的值: "+jObject);
String msg=jsonObject.getString("msg"); //可以获取 biz_data 对象为一个字符串输出
System.out.println("--- 三, 获取msg对象的值: "+msg);
int code=jsonObject.getInteger("code");
System.out.println("--- 四, 获取code对象的值: "+code);
控制台打印结果:
四、反序列化:将可供传输的数据格式转化为对象。
// 根据 二,步中jsonStr 的Key 创建实体对象 Response,Biz_data
package myjson.testmain;
import java.io.Serializable;
/**
* 2023年12月14日
* 创建json中key的对应实体类, 并序列化 Serializable,不然会报错额. 也可以使用其它系列化方式
*/
public class Response implements Serializable {
private static final long serialVersionUID = 1L;
private String code;
private String msg;
private Biz_data biz_data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Biz_data getBiz_data() {
return biz_data;
}
public void setBiz_data(Biz_data biz_data) {
this.biz_data = biz_data;
}
}
package myjson.testmain;
import java.io.Serializable;
/**
* 2023年12月14日
* 创建json中key的对应实体类
*/
public class Biz_data implements Serializable {
private static final long serialVersionUID = 1L;
private String code;
private Object data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
}
示例代码:
// 将 二,步中 jsonStr 转化为 Response 实体类
Response response=JSONObject.parseObject(jsonStr,Response.class);
// 获取 jsonStr中 data的值(对象).转化为 JSONObject 对象
Object dataObject=response.getBiz_data().getData();
JSONObject jsonObject2 = JSONObject.parseObject(dataObject.toString());
System.out.println("-=-==-=-=-=jsonObject2: "+jsonObject2);
//打印出来的结果为:{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}
控制台打印结果:
五、list列表遍历
// 成员方法:JSONArray parseArray(String text) // 创建 ReList实体类,Prens(用于反序列化 jsonStr中的resultData中的list列表里的对象)实体类
package myjson.testmain;
import java.io.Serializable;
/**
* 2023年12月14日
* 创建json中key的对应实体类
*/
public class ReList implements Serializable {
private static final long serialVersionUID = 1L;
private Object list;
public Object getList() {
return list;
}
public void setList(Object list) {
this.list = list;
}
}
package myjson.testmain;
import java.io.Serializable;
/**
* 2023年12月14日
* 创建json中key的对应实体类
*/
public class Prens implements Serializable {
private int aa001;
private String aa002;
private int aa003;
public int getAa001() {
return aa001;
}
public void setAa001(int aa001) {
this.aa001 = aa001;
}
public String getAa002() {
return aa002;
}
public void setAa002(String aa002) {
this.aa002 = aa002;
}
public int getAa003() {
return aa003;
}
public void setAa003(int aa003) {
this.aa003 = aa003;
}
}
示例代码:
// 以String 字符串获 jsonStr中resultData,jsonObject2对象在 四,步中已实力化
String jsonstr2=jsonObject2.getString("resultData");
/**
* 处理方式一, 转换为 JSONObject 对象
*/
JSONObject jsonObject3 = JSONObject.parseObject(jsonstr2);
// 转换为 JSONArray 对象
JSONArray jsonlist = JSONArray.parseArray(jsonObject3.getString("list"));
System.out.println("-----====jsonlist:"+jsonlist); // 打印出数组
// 遍历数组
for (int i = 0; i < jsonlist.size(); i++) {
// 获取 list 列表中的对象
JSONObject liobj = jsonlist.getJSONObject(i);
System.out.println("----liobj:"+liobj); // 打印对象
System.out.println(liobj.getInteger("aa003")+";"+liobj.getString("aa002")+";"+liobj.getInteger("aa001")); // 打印对象中的值
}
/**
* jsonObject2={"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}
* 处理方式二, 将 resultData 转换为实体对象 ReList, 取出 list 处理. 在 ReList实体中添加了 list属性对应Json的 key list
*/
// 创建 ReList 实体类,和 Prens(用于 反序列化 jsonStr中的resultData中的list列表里的对象)实体类
ReList respList=jsonObject2.getObject("resultData",ReList.class); // 反序列化,转化为实体类对象
System.out.println("respList.getList():"+respList.getList());
// 转换为 JSONArray 对象
JSONArray arryObj = JSONArray.parseArray(respList.getList().toString());
List<Prens> PrenList= arryObj.toJavaList(Prens.class); // 使用 JSONArray 的 toJavaList() 方法,转化为 list
for (Prens pren:PrenList) { //迭代集合
System.out.println(pren.getAa001()+"||"+pren.getAa002()+"||"+pren.getAa003());
}
控制台打印结果:
总结
main方法测试类JsonAlibaba的完整代码:
package myjson.testmain;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 2023年12月14日
* fastjson 操作
*/
public class JsonAlibaba {
public static void main(String[] args) {
/* //返回的 json格式数据
{
"code": "1",
"msg": "成功",
"biz_data": {
"code": 200,
"data": {
"resultData": {
"list": [
{
"aa001": 10004,
"aa002": "张三",
"aa003": 15
},
{
"aa001": 10005,
"aa002": "李四",
"aa003": 20
}
]
}
}
}
}*/
// 说明:json格式数据以 key-value 形式组成,key不能重复,可以是对象{},数组列表[]混合组成。
// 序列化:将对象转化为可供传输的数据格式。
// 反序列化:将可供传输的数据格式转化为对象。
// 一, 创建JSONObject对象
// 构造方法:
// public JSONObject()
// public JSONObject(Map<String, Object> map)
// 成员方法:
// public Object put(String key, Object value)
// public void putAll(Map<? extends String, ? extends Object> m)
// 定义Map集合对象,Map是一个 key-value 的集合对象,key不能重复,每个键最多只能映射到一个值。
Map<String, Object> map = new HashMap<>();
map.put("k_name", "张三"); //使用Map的put存值
map.put("k_sex", "男"); //使用Map的put存值
map.put("k_name", "李四"); //使用Map的put存值,重复使用k_name,值会被覆盖,李四覆盖张三
//构造方法传值
JSONObject gzff_json = new JSONObject(map);
System.out.println("一,gzff_json:" + gzff_json);
gzff_json.put("k_age", "30"); //使用JSONObject的put方法
System.out.println("二,gzff_json:" + gzff_json);
JSONObject obj_json = new JSONObject();
obj_json.put("work","程序猿"); // 继续添加新值
obj_json.putAll(map); // 使用 putAll 方法
System.out.println("三, obj_json:" + obj_json);
// 二, JSON格式的字符串与JSONObject对象相互转换
// 成员方法:
// String转JSONObject对象:public static JSONObject parseObject(String text)
// JSONObject对象转String:public static String toJSONString(Object object, SerializerFeature... features)
String jsonStr="{\"code\":\"1\",\"msg\":\"成功\",\"biz_data\":{\"code\":200,\"data\":{\"resultData\":{\"list\":[{\"aa001\":10004,\"aa002\":\"张三\",\"aa003\":15},{\"aa001\":10005,\"aa002\":\"李四\",\"aa003\":20}]}}}}";
//字符串转json对象
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println("字符串转json对象 jsonObject: "+jsonObject);
//json对象转字符串
String jsonString = JSON.toJSONString(jsonObject);
System.out.println("json对象转字符串 jsonString: "+jsonString);
// 三, 获取key的值
// 常用的成员方法:
// 获取Object类型的值:public Object get(Object key)
// 获取JSONObject类型的值:public JSONObject getJSONObject(String key)
// 获取String类型的值:public String getString(String key)
// 获取Integer类型的值:public Integer getInteger(String key)
// 获取 二, 步中的 jsonStr 中的值。jsonObject对象 二,步中已经实例化
Object obj=jsonObject.get("biz_data"); // 可以获取 msg 的值
System.out.println("--- 一, 获取biz_data对象的值: "+obj);
JSONObject jObject=jsonObject.getJSONObject("biz_data"); // 获取 msg 的值报错
System.out.println("--- 二, 获取biz_data对象的值: "+jObject);
String msg=jsonObject.getString("msg"); //可以获取 biz_data 对象为一个字符串输出
System.out.println("--- 三, 获取msg对象的值: "+msg);
int code=jsonObject.getInteger("code");
System.out.println("--- 四, 获取code对象的值: "+code);
// 四, 反序列化:将可供传输的数据格式转化为对象。
// 根据 二,步中jsonStr 的Key 创建实体对象 Response,Biz_data
// 将 二,步中 jsonStr 转化为 Response 实体类
Response response=JSONObject.parseObject(jsonStr,Response.class);
// 获取 jsonStr中 data的值(对象).转化为 JSONObject 对象
Object dataObject=response.getBiz_data().getData();
JSONObject jsonObject2 = JSONObject.parseObject(dataObject.toString());
System.out.println("-=-==-=-=-=jsonObject2: "+jsonObject2);
//打印出来的结果为:{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}
// 五, list列表遍历
// 成员方法:JSONArray parseArray(String text)
// 以String 字符串获 jsonStr中resultData,jsonObject2对象在 四,步中已实力化
String jsonstr2=jsonObject2.getString("resultData");
/**
* 处理方式一, 转换为 JSONObject 对象
*/
JSONObject jsonObject3 = JSONObject.parseObject(jsonstr2);
// 转换为 JSONArray 对象
JSONArray jsonlist = JSONArray.parseArray(jsonObject3.getString("list"));
System.out.println("-----====jsonlist:"+jsonlist); // 打印出数组
// 遍历数组
for (int i = 0; i < jsonlist.size(); i++) {
// 获取 list 列表中的对象
JSONObject liobj = jsonlist.getJSONObject(i);
System.out.println("----liobj:"+liobj); // 打印对象
System.out.println(liobj.getInteger("aa003")+";"+liobj.getString("aa002")+";"+liobj.getInteger("aa001")); // 打印对象中的值
}
/**
* jsonObject2={"resultData":{"list":[{"aa003":15,"aa002":"张三","aa001":10004},{"aa003":20,"aa002":"李四","aa001":10005}]}}
* 处理方式二, 将 resultData 转换为实体对象 ReList, 取出 list 处理. 在 ReList实体中添加了 list属性对应Json的 key list
*/
// 创建 ReList 实体类,和 Prens(用于 反序列化 jsonStr中的resultData中的list列表里的对象)实体类
ReList respList=jsonObject2.getObject("resultData",ReList.class); // 反序列化,转化为实体类对象
System.out.println("respList.getList():"+respList.getList());
// 转换为 JSONArray 对象
JSONArray arryObj = JSONArray.parseArray(respList.getList().toString());
List<Prens> PrenList= arryObj.toJavaList(Prens.class); // 使用 JSONArray 的 toJavaList() 方法,转化为 list
for (Prens pren:PrenList) { //迭代集合
System.out.println(pren.getAa001()+"||"+pren.getAa002()+"||"+pren.getAa003());
}
}
}
示例工程名:readinglist
Maven引入jar包,pom.xml文件:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>