java中json转复杂对象
前言
现今接口的设计越来越多的使用json格式来传输数据,最大的优点就是不受语言的限制,配合rest风格的接口用起来很是方便.
但是在java中为了获取json 数据的方便往往会将拿到的json数据转为对象,这样用起来会更加方便.
json转复杂对象
工具包
用的com.alibaba.fastjson.JSONObject
解析方式
String jsonString = "{"key": "value"}";
JSONObject jsonObject = JSONObject.parseObject(jsonString);
第一步先将 json字符串转为 json 对象.
然后就是使用 jsonObject.get(""),或jsonObject.getString("")等等,
这种虽然可以用 , 但是只适用于json比较简单少的情况, 如果复杂的json就不适用了
可以使用 T t = JSONObject.parseObject(“json字符串”, T.class);
示例
先看一个json字符串示例 如下:
{
"ret": "0",
"msg": "返回成功",
"data": [
{
"xxx": [
{
"ffe": "200000",
"ye": "17375.84",
"zt": "还ww款",
"bh": "0220wwe0565",
"zh": "0024we19233"
}
],
"yyy": [
{
"dwc": "xxxx农e村x局",
"dwh": "02w22381we5",
"grh": "0024398219",
"grye": "17515.39",
"grzt": "封ew存"
},
{
"dwc": "xxx人sd民xx",
"dwz": "02d33xx2068",
"grh": "00xdxxd4667",
"grye": "0",
"grzt": "销户"
}
]
}
]
}
这是个json对象和json数组相互嵌套的,看起来比较复杂的json字符串.
下边来创建json所对应的java对象类.
但是怎么建呢,这里提供一个思路就是从最里层往外依次建立类.
所有类省略构造方法,get() set()方法
注意: 属性名要和json中对应.
- 第一步 : 建立xxx json数组里边的单元内容 下的
yyy json数组和xxx 是同级的 所以也建立一下
public class Xxx {
private String ffe;
private String ye;
private String zt;
private String bh;
private String zh;
}
public class Yyy {
private String dwc;
private String dwh;
private String grh;
private String grye;
private String grzt;
}
- 第二步 : 建立对象 对应data数组里边的一个单元 , 包含了xxx , 和 yyy
注意属性名称要对应xxx,yyy
public class Jb {
private List<Xxx> xxx;
private List<Yyy> yyy;
}
- 第三步: 最外层的
由于ret 和 msg 是每个接口通用的, 这里可以考虑写一个父类, 让不同的接口去继承
父类(通用部分)
public class CommonResponse {
// 响应代码
private String ret ;
// 描述
private String msg ;
}
子类: (注意属性名对应json中的data)
public class Jbbo extends CommonResponse {
private List<Jb> data;
public Jbbo(){}
public Jbbo(String ret, String msg, List<Jb> data) {
super(ret, msg);
this.data = data;
}
public List<Jb> getData() {
return data;
}
public void setData(List<Jb> data) {
this.data = data;
}
}
实体类已经建完了,终于可以使用了
Jbbo jbbo = JSONObject.parseObject("json字符串", Jbbo.class);
以上代码就会将json字符串根据属性对应到Jbbo对象中的各个属性.
运行效果
@Test
public void test(){
Jbbo jbbo = JSONObject.parseObject(jsonString, Jbbo.class);
System.out.println(jbbo);
}
打断点如下:
总结
这种方式虽然在建java对象的时候比较麻烦些(其实也不算麻烦),但是在使用的时候秩只需要上述一行代码,即可将json完全解析
在使用数据的时候只需要用 “对象 + 点 get方法” 的方式层级调用就可以得到数据 了.
上述只是一个复杂的示例, 其他的都是换汤不换药.
注意事项
- JSONObject是根据属性名来对应的, 属性名匹配不上不会赋值成功.
- 如果不想要某一个字段 , 可以直接在实体类中删掉即可.
- 若要实际跑通 , 要在上边加上构造方法以及get/set 方法. 上述是减少篇幅省略了.
更多推荐
所有评论(0)