Json数据处理
此处使用的JSON处理方式都为阿里下的fastjson2依赖(com.alibaba.fastjson2:fastjson2:2.0.15)下的处理方式。其他的也可以可能会有细微差距
String字符串格式的Json数据转换为JSON数据
//转为JSONObject格式数据
JSONObject jsonObject = JSON.parseObject(json);
//转为JSONArray格式数据
JSONArray objects = JSON.parseArray(json);
Json数据分为JSON对象即数据为对象用大括号{}包裹数据,即使用JSONObject接收数据。
另一个种常用为JSON数组类型数据用中括号[]包裹数据,即使用JSONArray接收数据。
提取JSONObject数据中想要的数据
- 如果直接提取对象数据中的某个值时:可以直接使用Object object = jsonObject.get(“subjectName”);
此处get()方法,即提取出值,提取出的为Object类型值,之后在转换为对应需要的值; - 如果提取对象中还包裹层对象数据,而我需要取的是该对象包裹的对象中的一个数据呢:如下类型JSON数据
{
"aId": "90100",
"id": 246680609219420160,
"product": {
"appCode": "8A57DB69BAB162A",
"appSecret": "En1RCd80",
"authorizationEnd": 168000,
"authorizationStart": 169000,
"id": "26240"
}
}
如果我需要取product对象中的appSecret的值那该如何处理呢,不急,JSONObject对象中有一个getJSONObject()方法可以使用。
首先我们去获取product数据**JSONObject jsonObject2 =
jsonObject.getJSONObject(“product”);这样我们就获取到了product的JSON对象,然后获取appSecret的值就在调用get()方法即可。如下:
JSONObject jsonObject2 = jsonObject.getJSONObject("product");
//此处为String类型,即get方法后为object对象直接调用toString方法转为String类型
String appSecret = jsonObject2.get("appSecret").toString;
//如果确定且知道值时什么类型也可以直接获取对应类型
如下:
- 如果是取值对象中还包括数组集合形式的JSON数据,我们可以使用getJSONArray()方法去获取如对应的数组集合数据。
{
"aId": "590100",
"id": 24660160,
"product": {
"appCode": "1960D7DB69BAB162A",
"appSecret": "En1R7ACd80",
"authorizationEnd": 161000,
"authorizationStart": 162000,
"id": "505307339369226240",
"resourceFields": [
{
"dropDetail": "一般纳税人",
"fieldName": "纳税人性质",
"fieldType": "下拉选(单选)",
"id": 40,
},
{
"dropDetail": "成都",
"fieldName": "归属公司",
"fieldType": "下拉选(单选)",
"id": 43,
}
],
}
}
如上数据我们要去取resourceFields里面的数据,该数据由[]包裹,所以为数组集合数据。在转为JSON对象后获取方式及如下
JSONObject jsonObject2 = jsonObject.getJSONObject("product");
//通过getJSONArray方法获取JSONObject中的数组数据
JSONArray jsonArray = jsonObject2.getJSONArray("resourceFields");
//如果要获取对象数据可以遍历此数组集合
for (int i = 0; i < jsonArray.size(); i++) {
//获取集合下对象中的对应的字段值
String temp = jsonArray.getJSONObject(i).get("fieldName").toString
String temp2 = jsonArray.getJSONObject(i).get("dropDetail").toString