需求:
将复杂格式的字符串,按照指定顺序,将value进行输出
json数据源:
{
"UnicomWarning": {
"Version": "1.0",
"TestFlag": "1",
"AreaCode": "",
"RecordCount": "1",
"Warnings": [{
"WarnId": "00001",
"WarnName": "测试预警",
"CreateTime": "2018-11-08 14:00:00",
"RemoveTime": null,
"ComplainNum": 0,
"WarnContent": "测试预警内容",
"BusiType": "05",
"BusiSubType": null,
"ServType": "010103",
"OccurRange": "19",
"CityCode": "190",
"WarnState": "01",
"WarnLevel": "1",
"WarnDesc": "RULE0001",
"WarnObject": "1测试"
}, {
"WarnId": "00001",
"WarnName": "测试预警",
"CreateTime": "2018-11-08 14:00:00",
"RemoveTime": "2018-11-08 14:30:00",
"ComplainNum": 0,
"WarnContent": "测试预警内容",
"BusiType": "05",
"BusiSubType": null,
"ServType": "010103",
"OccurRange": "19",
"CityCode": "190",
"WarnState": "01",
"WarnLevel": "1",
"WarnDesc": "RULE0001",
"WarnObject": "1测试"
}]
}
}
发现了一个json在线解析工具bejson: http://www.bejson.com
指定输出字段顺序:
"WarnId","WarnName","CreateTime","RemoveTime","ComplainNum","WarnContent","BusiType","BusiSubType","ServType","OccurRange","CityCode","WarnState","WarnLevel","WarnDesc","WarnObject"
输出格式:
00001测试预警2018-11-08 14:00:00null0测试预警内容05null01010319190011RULE00011测试
需要使用的json工具jar包:
net.sf.json.JSONArray;
net.sf.json.JSONObject;
源码:
package com.pz.json.utils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JsonTest {
public static void main(String[] args) {
//按照orderKeys中字段顺序,对json中的value进行排序
String[] orderKeys = {"WarnId","WarnName","CreateTime","RemoveTime","ComplainNum","WarnContent","BusiType","BusiSubType","ServType","OccurRange","CityCode","WarnState","WarnLevel","WarnDesc","WarnObject"};
//需要提取出value,并进行排序的json数据源
String body = "{\"UnicomWarning\":{\"Version\":\"1.0\",\"TestFlag\":\"1\",\"AreaCode\":\"a\",\"RecordCount\":\"1\",\"Warnings\":[{\"WarnId\":1,\"WarnName\":\"测试预警\",\"CreateTime\":\"2018-11-08 14:00:00\",\"RemoveTime\":null,\"ComplainNum\":0,\"WarnContent\":\"测试预警内容\",\"BusiType\":\"05\",\"BusiSubType\":null,\"ServType\":\"010103\",\"OccurRange\":\"19\",\"CityCode\":\"190\",\"WarnState\":\"01\",\"WarnLevel\":\"1\",\"WarnDesc\":\"RULE0001\",\"WarnObject\":\"1测试\"},{\"WarnId\":\"00001\",\"WarnName\":\"测试预警\",\"CreateTime\":\"2018-11-08 14:00:00\",\"RemoveTime\":\"2018-11-08 14:30:00\",\"ComplainNum\":0,\"WarnContent\":\"测试预警内容\",\"BusiType\":\"05\",\"BusiSubType\":null,\"ServType\":\"010103\",\"OccurRange\":\"19\",\"CityCode\":\"190\",\"WarnState\":\"01\",\"WarnLevel\":\"1\",\"WarnDesc\":\"RULE0001\",\"WarnObject\":\"1测试\"}]}}";
JSONObject jsonObject =JSONObject.fromObject(body);
//获取json对象UnicomWarning
JSONObject data = jsonObject.getJSONObject("UnicomWarning");
//获取json对象Warnings
JSONArray jsonArray = data.getJSONArray("Warnings");
JSONObject row = null;
StringBuffer finalStr = new StringBuffer();
//获取value之间的分隔符
byte[] b = {0x01};
String separatorStr = new String(b) ;//value之间的分隔符
String lineBreaker = "\r\n";//行之间的分隔符
for (int i = 0; i < jsonArray.size(); i++) {
row = jsonArray.getJSONObject(i);
//System.out.println(row);
for (String keyStr : orderKeys) {
Object keyStr_v = "";
if(row.has(keyStr)) {
keyStr_v = row.get(keyStr).equals(null)?"":row.get(keyStr);
}
finalStr.append(keyStr_v.toString()).append(separatorStr);
}
finalStr.append(data.get("AreaCode")).append(lineBreaker);
}
System.out.println(finalStr);
}
}
输出格式:
1测试预警2018-11-08 14:00:000测试预警内容0501010319190011RULE00011测试a
00001测试预警2018-11-08 14:00:002018-11-08 14:30:000测试预警内容0501010319190011RULE00011测试a