String类型的json体转换为json(json嵌套字符串json,嵌套字符串json数组等)转换并解析为需要的json格式
2014-09-05 15:28
645 查看
之前困惑的一个问题现在已研究清晰,所以拿出来跟大家分享下,以至于遇到此问题不会棘手,上例子:
例原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的嵌套关系。
例原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的嵌套关系。
相关文章推荐
- json的作用:按规定格式保存js语言中的一组数据并转换为字符串(json是种特殊的容器,一般保存对象和数组数据(可以嵌套),并把它们装换为字符串在网络中传输?))
- 把对象转换成JSON格式的Object类型和String类型的字符串
- 后台将对象转换为json格式,前台js解析json数据,将字符串转化为数组
- objective-c和java下解析对象类型和数组类型JSON字符串
- 字符串数组类型的object,如何转换为string[],
- JAVA生产报表导出成PDF格式(报表中的内容存储在String字符串中,需要解析,业务特殊)
- 《C++标准函数库》中说的有三个函数可以将字符串的内容转换为字符数组和C—string (CString、char*、String三种类型互换)
- Dom4j解析xml && json格式转换成String
- [asp.net] json数组、字符串 解析(转换为对象)
- 如何将json格式的string字符串转换为string数组
- Array(数组)与Json String (Json字符串) 的相互转换
- 日期转换需要注意的事项,解析日期格式的字符串
- json中string类型的datetime格式转换为datetime类型:例string类型"/Date(1242357713797+0800)/" 转为datetime类型"yyyy-MM-dd"
- 使用JSONKit将字符串,字典,数组转换成json格式
- 解析数据文件之字符串转数组类型【里面是json格式化字典】类型
- c# json数据解析——将字符串json格式数据转换成对象
- StringToDoubleArray函数:IDL中将字符串转换为double类型的数组
- android实现json数据的解析和把数据转换成json格式的字符串
- js 将json字符串转换为json对象的方法解析 作者: 字体:[增加 减小] 类型:转载 将json字符串转换为json对象的方法。在数据传输过程中,json是以文本,即字符串的形式传递的,而J
- 完成一程序演示字符数组、C风格字符串、std::string和MFC中的Cstring类型之间的相互转换