String JSONObject JSONArray Map之间的相互转换关系,需要的可以参考一下。
1.使用的jar包
JSON使用阿里的fastJson为依赖包。
- gradle依赖管理如下:
compile group: ‘com.alibaba’, name: ‘fastjson’, version:‘1.2.70’
- Maven依赖管理如下:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${alibaba.fastjson.version}</version>
<scope>compile</scope>
</dependency>
<alibaba.fastjson.version>1.2.70</alibaba.fastjson.version>
2.String转JSONObject
前提:String 是JSONObject格式的字符串
JSONObject jSONObject = JSONObject.parseObject(String);
3.String转JSONArray
前提:String 是JSONArray格式的字符串
JSONArray jsonArray= JSONArray.parseArray(String);
4.JSONObject中的数组提取为JSONArray
{
"AreaName": "西安",
"OldCityId": "029",
"Pinyin": "xi'an",
"Result": [{
"AreaName": "雁塔区",
"Person": "112345",
"Wether": "晴天"
},
{
"AreaName": "高新区",
"Person": "117345",
"Wether": "暴雨"
}
]
}
提取Result对应的数组
JSONArray jsonArray= jsonObject.getJSONArray("Result");
5.JSONArray提取为JSONObject
遍历时候获取第i个JSONObject即可。
JSONObject jsonObject = jsonArray.getJSONObject(i);
6.遍历JSONArray
- 第一种for循环
for (int i = 0; i < paramss.size(); i++) {
JSONObject object = paramss.getJSONObject(i);
}
- 第二种for增强
DeviceGetTableResult response = deviceOperateService.queryTable(neId, "alarmShieldByNe", params);
JSONArray paramss = response.getResult();
for (Object obj : paramss) {
JSONObject dataObj = JSONObject.parseObject(JSONObject.toJSONString(obj));
}
JSONObject dataObj = JSONObject.parseObject(JSONObject.toJSONString(obj));
该行涉及到将obj转为json字符串,在转为JSONObject 。
7.遍历JSONObject
其实循环JSONObject的时候转为Map在循环。
- 方式1:转为map,使用map遍历。见章节10
- 方式2:迭代遍历
String str = "{"title":"this is a news","content":"三国演义的作者被证实是Spring的思念写的"}";
JSONObject jsonObject = new JSONObject(str);
Iterator<String> it = jsonObject.keys();
while(it.hasNext()){
// 获得key
String key = it.next();
String value = jsonObject.getString(key);
System.out.println("key: "+ key+",value:"+value);
}
8.JSONArray转为JSONObject
DeviceGetTableResult response = deviceOperateService.queryTable(neId, "alarmShieldByNe", params);
JSONArray paramss = response.getResult();
for (Object obj : paramss) {
//使用这一行的时候,会创建一个新的JSONObject 对象
JSONObject dataObj = JSONObject.parseObject(JSONObject.toJSONString(obj));
}
DeviceGetTableResult response = deviceOperateService.queryTable(neId, "alarmShieldByNe", params);
JSONArray paramss = response.getResult();
for (Object obj : oidArray) {
//这种方式不会创建一个新的JSONObject 对象,在性能采集中体现
JSONObject dataObj = (JSONObject) JSON.toJSON(obj);
String oid = dataObj.getString("oid");
//rsurlMap是代码其他地方定义的Map<String, String>类型,通过JSONObject对象中的指定key获取对应的值
String oidResult = rsurlMap.get(oid);
dataObj.put("value", oidResult);
}
9.Map转为json字符串
Map<String, Object> paraMap = new HashMap<String, Object>();
String str = JSONObject.toJSONString(paraMap);
源码中返回为String类型:
public static String toJSONString(Object object) {
return toJSONString(object, emptyFilters);
}
10.JSONObject转为Map
其实循环JSONObject的时候可以转为Map在循环。
- 方式1:
JSONObject currentConfigObj = jsonArray.getJSONObject(i);
Map<String, Object> jsonMap = JSONObject.toJavaObject(currentConfigObj, Map.class);
- 方式2
JSONObject类中提供的方法 。
Map<String, Object> jsonMap = currentConfigObj.getInnerMap() ;
11.JSONObject转为javaBean实体对象
IpPortBaseVlan ipPortBaseVlan = JSON.toJavaObject(jSONObject, IpPortBaseVlan.class);
//等价于
IpPortBaseVlan ipPortBaseVlan = JSONObject.toJavaObject(jSONObject, IpPortBaseVlan.class);
//原因: JSONObject继承JSON 。
改代码中将JSONObject转为javaBean实体对象。jSONObject是JSONObject的对象。
JSON类中源码
public static <T> T toJavaObject(JSON json, Class<T> clazz) {
return TypeUtils.cast(json, clazz, ParserConfig.getGlobalInstance());
}
12 list 转 json
List<User> userList = new ArrayList<>();
String json = JSON.toJSONString(userList);
13 json 转 list
String json="";
List<User> list = JSON.parseArray(json,User.class);
14 List<Map<String, Object>>转为JSONArray
因为从List<Map<String, Object>>中获取每一条记录的某多个key的时候,写代码要用if判断,故采用转换为JSONArray 。使用JSONArray 获取key就比较优雅了。
//查库
List<Map<String, Object>> specialMetricPortLists = dao.searcSpecialMetricPort(neTypeName,finalCardTypeId);
JSONArray array= JSONArray.parseArray(JSON.toJSONString(specialMetricPortLists));
for (Object obj : array) {
JSONObject dataObj = JSONObject.parseObject(JSONObject.toJSONString(obj));
//获取METYPE_ID
String specialMetypeId = dataObj.getString("METYPE_ID");
}