之前困惑的一个问题现在已研究清晰,所以拿出来跟大家分享下,以至于遇到此问题不会棘手,上例子:
例原JSON串如下
String data="{
"monitorId": "88AA0D04328011E48B6B00059A3C7800",
"method": "ModifyAsset",
"assetId": "0203019f527b42fa952545e40f6e07b8",
"objects": "[{\"OName\":\"dfd\",\"OID\":\"fd\",\"Interval\":\"12\",\"AlarmInfo\":[{\"AlarmLevel\":\"warning\",\"AlarmThreshold\":\"50\"},{\"AlarmLevel\":\"critical\",\"AlarmThreshold\":\"56\"},{\"AlarmLevel\":\"fatal\",\"AlarmThreshold\":\"77\"}],\"$$hashKey\":\"051\"}]",
"id": 1,
"params": "{\"AssetID\":\"0203019f527b42fa952545e40f6e07b8\",\"AssetIP\":\"192.168.0.4\",\"AssetName\":\"HP\",\"AssetPort\":161,\"GetMethod\":\"snmp\",\"GetParams\":{\"Community\":\"public\",\"Password\":\"w\",\"Username\":\"www\",\"Version\":\"2.0\"}}",
"jsonrpc": "2.0",
"enabled": "t",
"devicetypeId": "dcb0f7d4e3284487a7042fda06c8d1fd"
}"
1.首先转换整个data串
JSONObject jo = new JSONObject(data);
2.将params后的String型的JSON串转换成JSON格式
JSONObject jo1 = new JSONObject(jo.getString("params"));
3.转换String型的objects数组为JSON
JSONArray ja = new JSONArray(jo.getString("objects"));
4.转换后封装
jo.put("objects",ja);
jo.put("params",jo1);
此时jo对象即为封装后的标准JSON体
补充:
1. 若要转换JSON体中字段的类型,如下,将String类型的AssetID转换成int型的
String id= jo1.getString("AssetID");
int aid= Integer.parseInt(id);
JSONObject member = new JSONObject();
member.put("AssetID",aid);
jo.put("AssetID",member);
2.要重组String类型数组的例子,把sJson字符串数组需要拆解并重组,放到原来str中。
String isvalue = "2121212122";
String str = "{\"jsonrpc\":\"2.0\",\"method\":\"AddAsset\",\"id\": \""
+ isvalue
+ "\",\"params\":{\"AssetID\": \""
+ isvalue
+ "\",\"AssetName\": \""
+ isvalue
+ "\",\"AssetIP\": \""
+ isvalue
+ "\",\"AssetPort\":161,\"GetMethod\":\"snmp\",\"GetParams\":{\"Community\":\"public\",\"Version\":\"1.0\",\"Username\":\"admin\",\"Password\":\"1\"}}}";
String sJson = "[{'gwcxxid':'1','spsl':'2'},{'gwcxxid':'3','spsl':'4'},{'gwcxxid':'5','spsl':'6'}]";
JSONArray jsonArray = new JSONArray(sJson);
System.out.println(jsonArray);
JSONObject jj = new JSONObject(str);
int iSize = jsonArray.length();
System.out.println("Size:" + iSize);
jj.put("objects", jsonArray);
for (int i = 0; i < iSize; i++) {
JSONObject jsonObj = jsonArray.getJSONObject(i);
//此处从数组中得到的字段可进行重组。譬如字段类型的转换等等
int a = Integer.parseInt((String) jsonObj.get("gwcxxid"));
jsonObj.put("gwcxxid", a);
jsonObj.put("spsl", jsonObj.get("spsl"));
jj.put("objects", jsonArray);
}
System.out.println("循环外" + jj.toString());
}
总结:无论如何转换,只是JSON的嵌套关系。