复杂嵌套格式json数据转换

需求:
将复杂格式的字符串,按照指定顺序,将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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值