JsonObject、JsonArray、Map、String转换

目录

1.Json介绍

 2.JsonObject与JsonArray

2.1 将String转jsonObjet

2.2 String转JsonArray

2.3 jsonarry转jsonObject

2.4 map转JsonObject

2.5 JsonObject转map


1.Json介绍

首先简单介绍下json(JavaScript Object Notation),是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成,JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。示例如下:

var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
  • 对象表示为键值对

  • 数据由逗号分隔

  • 花括号保存对象

  • 方括号保存数组

完成json示例如下:

[
  {
    "JsonNode": {
      "根据key1获取下一个商家编号": [
        {
          "key1": "value1"
        },
        {
          "code": 0,
          "msg": "success"
        }
      ],
      "根据key1获取下一个商家编号,key1不存在": [
        {
          "key1": "value11212"
        },
        {
          "code": 6001,
          "msg": "Part Key 池中无数据"
        }
      ]
    },
    "JsonNode": {
      "添加新的商家编号": [
        {
          "key1": "value1",
          "key2": "10086"
        },
        {
          "code": 0,
          "msg": "success"
        }
      ],
      "添加新的商家编号,key1不存在": [
        {
          "key1": "value112120025",
          "key2": "10086"
        },
        {
          "code": 500,
          "msg": "系统异常"
        }
      ]
    }
  }
]

 2.JsonObject与JsonArray

JSONObject的数据是用 { } 来表示,如str
String str = "{ \"id\" : \"123\", \"name\" : \"zhangsan\", \"title\" : \"test\", \"content\" : null  }"
JSONArray,由JSONObject构成的数组,用  [ { } , { } , ......  , { } ]  来表示

String strarry = "[ {  \"id\" : \"123\", \"name\" : \"zhangsan\", \"title\" : \"test\" }, {\"content\" : null , \"beginTime\" : 1398873600000,  \"endTime\":0 } ] ";

2.1 将String转jsonObjet

两种方式(fastjson与)分别表达如下

//net.sf.json        
JSONObject jsonObject = JSONObject.fromObject(str);
LOGGER.info("jsonObject: {}"+jsonObject, jsonObject.getClass().getName());

//fastjson
JSONObject jsonObject1 = JSONObject.parseObject(str);
LOGGER.info("jsonObject1 {}: "+jsonObject1, jsonObject1.getClass().getName());
[INFO ] 2019-06-08 18:20:37,794 method:com.qa.utils.JsonDemo.JsonFile(JsonDemo.java:40)
jsonObject: net.sf.json.JSONObject{"id":"123","courseID":"huangt-test","title":"提交作业","content":null}
[INFO ] 2019-06-08 18:20:37,880 method:com.qa.utils.JsonDemo.JsonFile(JsonDemo.java:43)
jsonObject1 com.alibaba.fastjson.JSONObject: {"id":"123","title":"提交作业","courseID":"huangt-test"}

2.2 String转JsonArray

//net.sf.json  
JSONArray jsonArray = JSONArray.fromObject(strarry2);
LOGGER.info("jsonArray: {}"+jsonArray, jsonArray.getClass().getName());

//fastjson
JSONArray jsonArray1 = JSONArray.parseArray(strarry2);
LOGGER.info("jsonArray1: {}"+jsonArray1, jsonArray1.getClass().getName());
[INFO ] 2019-06-08 18:26:54,654 method:com.qa.utils.JsonDemo.JsonFile(JsonDemo.java:46)
jsonArray: net.sf.json.JSONArray[{"id":"123","courseID":"huangt-test","title":"提交作业"},{"content":null,"beginTime":1398873600000,"endTime":0}]
[INFO ] 2019-06-08 18:26:54,748 method:com.qa.utils.JsonDemo.JsonFile(JsonDemo.java:49)
jsonArray1: com.alibaba.fastjson.JSONArray[{"id":"123","title":"提交作业","courseID":"huangt-test"},{"beginTime":1398873600000,"endTime":0}]

2.3 jsonarry转jsonObject

遍历jsonArray

int size = jsonArray.size();
JSONObject jsoncontext = null;
   for (int i = 0; i < size; i++) {
          // 遍历 jsonarray 数组,把每一个对象转成 json 对象
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            //JSONObject jsonObject1 = (JSONObject) jsonArray.get(i);
            jsoncontext = jsonObject.getJSONObject(stringName); 
        }

遍历jsonObject

Iterator<Map.Entry<String, Object>> iterable = jsonObject1.entrySet().iterator();
        while (iterable.hasNext()) {
            String key = iterable.next().getKey();
            String value = jsonObject1.getString(key);
            LOGGER.info("key="+key+" ,value="+value);
        }

2.4 map转JsonObject

net.sf.json可以直接 通过fromObject方法,将Map集合转为JsonObject,fastjson需要先将map转为json,再通过parseObject方法转为JsonObject。无论通过哪种包转的,都可以通过keySet遍历,以数组形式输出键值。

LinkedHashMap<String, Object> jsonNode = new LinkedHashMap<>();
//获得map的迭代器,用作遍历map中的每一个键值对。Iterator是迭代器
Iterator<Map.Entry<String, Object>> iterator = jsoncontext != null ? jsoncontext.entrySet().iterator() : null;
        while (Objects.requireNonNull(iterator).hasNext()){
            String key = iterator.next().getKey();
            Object value = jsoncontext.get(key);
            System.out.println("key="+key+" value="+value);
            jsonNode.put(key, value);
        }
//将HashMap转为jsonObject字符串
JSONObject jsonObject = JSONObject.fromObject(jsonNode);
com.alibaba.fastjson.JSONObject jsonObject1 = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(jsonNode),Feature.OrderedField);
LOGGER.info("net.sf.json: map转为JSONObject"+jsonObject);
LOGGER.info("jsonObject的键:"+jsonObject.keySet());
LOGGER.info("fastjson: map转为com.alibaba.fastjson.JSONObject "+jsonObject1);
LOGGER.info("jsonObject的键:"+jsonObject1.keySet());

fastjson获取的键,默认是无序的,可以通过自带的字段指定排序:Feature.OrderedField,new JsonObject时,也可以指定有序

//传入true则内部使用LinkedHashMap而非HashMap,实现转toString时key保持put入的顺序
com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject(true);
[INFO ] 2019-06-09 23:36:53,804 method:com.qa.utils.JsonDemo.getString(JsonDemo.java:52)
net.sf.json: map转为JSONObject{"根据appkey获取下一个商家编号":[{"appkey":"autorun__qa"},{"code":0,"msg":"success"}],"根据appkey获取下一个商家编号,appkey不存在":[{"appkey":"autorun__qa1212"},{"code":6001,"msg":"Part Key 池中无数据"}],"根据gg,appkey不存在":[{"appkey":"autorun__qa1212"},{"code":6001,"msg":"Part Key 池中无数据"}]}
[INFO ] 2019-06-09 23:36:53,806 method:com.qa.utils.JsonDemo.getString(JsonDemo.java:53)
jsonObject的键:[根据appkey获取下一个商家编号, 根据appkey获取下一个商家编号,appkey不存在, 根据gg,appkey不存在]
[INFO ] 2019-06-09 23:36:53,807 method:com.qa.utils.JsonDemo.getString(JsonDemo.java:54)
fastjson: map转为com.alibaba.fastjson.JSONObject {"根据appkey获取下一个商家编号":[{"appkey":"autorun__qa"},{"msg":"success","code":0}],"根据gg,appkey不存在":[{"appkey":"autorun__qa1212"},{"msg":"Part Key 池中无数据","code":6001}],"根据appkey获取下一个商家编号,appkey不存在":[{"appkey":"autorun__qa1212"},{"msg":"Part Key 池中无数据","code":6001}]}
[INFO ] 2019-06-09 23:36:53,808 method:com.qa.utils.JsonDemo.getString(JsonDemo.java:55)
jsonObject的键:[根据appkey获取下一个商家编号, 根据gg,appkey不存在, 根据appkey获取下一个商家编号,appkey不存在]

2.5 JsonObject转map

com.alibaba.fastjson.JSONObject jsonObject1 = com.alibaba.fastjson.JSONObject.parseObject(JSON.toJSONString(jsonNode), Feature.OrderedField);
Map<String, Object> map = com.alibaba.fastjson.JSONObject.toJavaObject(jsonObject1, Map.class);
LOGGER.info("json transfer to map {}", map);
LOGGER.info("json transfer to map {}", map.getClass().getName());
[INFO ] 2019-06-10 00:17:41,538 method:com.qa.utils.JsonDemo.getString(JsonDemo.java:60)
json transfer to map {"根据appkey获取下一个商家编号":[{"appkey":"autorun__qa"},{"code":0,"msg":"success"}],"根据appkey获取下一个商家编号,appkey不存在":[{"appkey":"autorun__qa1212"},{"code":6001,"msg":"Part Key 池中无数据"}],"根据gg,appkey不存在":[{"appkey":"autorun__qa1212"},{"code":6001,"msg":"Part Key 池中无数据"}]}
[INFO ] 2019-06-10 00:17:41,538 method:com.qa.utils.JsonDemo.getString(JsonDemo.java:61)
json transfer to map com.alibaba.fastjson.JSONObject

2.6遍历jsonobject

# 这里跟Map一样
for (Map.Entry entry : jsonObject.entrySet()) {
            if (key.equals(entry.getKey())) {
                return entry.getValue().toString();
            }
        }

参考:https://www.cnblogs.com/xuanbo/p/6913585.html

复杂json的解析

https://www.cnblogs.com/fengli9998/p/7381957.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值