String JSONObject JSONArray Map之间的相互转换

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");
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值