JSON对象-JSONObject

JSONObject

介绍

JSONObject代表一个JSON中的键值对象,这个对象以大括号包围,每个键值对使用,隔开,键与值使用:隔开,一个JSONObject类似于这样:

  1. {
  2. "key1":"value1",
  3. "key2":"value2"
  4. }

此处键部分可以省略双引号,值为字符串时不能省略,为数字或波尔值时不加双引号。

使用

创建

  1. JSONObject json1 = JSONUtil.createObj()
  2. .put("a", "value1")
  3. .put("b", "value2")
  4. .put("c", "value3");

JSONUtil.createObj()是快捷新建JSONObject的工具方法,同样我们可以直接new:

  1. JSONObject json1 = new JSONObject();
  2. ...

转换

  1. JSON字符串解析

    1. String jsonStr = "{\"b\":\"value2\",\"c\":\"value3\",\"a\":\"value1\"}";
    2. //方法一:使用工具类转换
    3. JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
    4. //方法二:new的方式转换
    5. JSONObject jsonObject2 = new JSONObject(jsonStr);

//JSON对象转字符串(一行) jsonObject.toString();

// 也可以美化一下,即显示出带缩进的JSON: jsonObject.toStringPretty();

  1. 2. JavaBean解析
  2. 首先我们定义一个Bean
  3. ```java
  4. // 注解使用Lombok
  5. @Data
  6. public class UserA {
  7. private String name;
  8. private String a;
  9. private Date date;
  10. private List<Seq> sqs;
  11. }

解析为JSON:

  1. UserA userA = new UserA();
  2. userA.setName("nameTest");
  3. userA.setDate(new Date());
  4. userA.setSqs(CollectionUtil.newArrayList(new Seq(null), new Seq("seq2")));
  5. // false表示不跳过空值
  6. JSONObject json = JSONUtil.parseObj(userA, false);
  7. Console.log(json.toStringPretty());

结果:

  1. {
  2. "date": 1585618492295,
  3. "a": null,
  4. "sqs": [
  5. {
  6. "seq": null
  7. },
  8. {
  9. "seq": "seq2"
  10. }
  11. ],
  12. "name": "nameTest"
  13. }

可以看到,输出的字段顺序和Bean的字段顺序不一致,如果想保持一致,可以:

  1. // 第二个参数表示保持有序
  2. JSONObject json = JSONUtil.parseObj(userA, false, true);

结果:

  1. {
  2. "name": "nameTest",
  3. "a": null,
  4. "date": 1585618648523,
  5. "sqs": [
  6. {
  7. "seq": null
  8. },
  9. {
  10. "seq": "seq2"
  11. }
  12. ]
  13. }

默认的,Hutool将日期输出为时间戳,如果需要自定义日期格式,可以调用:

  1. json.setDateFormat("yyyy-MM-dd HH:mm:ss");

得到结果为:

  1. {
  2. "name": "nameTest",
  3. "a": null,
  4. "date": "2020-03-31 09:41:29",
  5. "sqs": [
  6. {
  7. "seq": null
  8. },
  9. {
  10. "seq": "seq2"
  11. }
  12. ]
  13. }

同样,JSONUtil还可以支持以下对象转为JSONObject对象:

  • String对象
  • Java Bean对象
  • Map对象
  • XML字符串(使用JSONUtil.parseFromXml方法)
  • ResourceBundle(使用JSONUtil.parseFromResourceBundle)

JSONUtil还提供了JSONObject对象转换为其它对象的方法:

  • toJsonStr 转换为JSON字符串
  • toXmlStr 转换为XML字符串
  • toBean 转换为JavaBean