在 Java 中使用 JSON

今天药忘吃喽~ 2022-05-24 07:48 380阅读 0赞

一、JSON概述

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,与开发语言无关。 JSON 易于阅读和编写,同时也易于机器解析和生成,因此常用来在前后端进行数据交换。

JSON 的数据结构
这里写图片描述
对象(object):一个对象包含一系列非排序的键/值对,一个对象以 { 开始,并以 } 结束。每个键/值对之间使用 : 分区。多个键值对之间通过 , 分割。需要注意的是JSON 的键是一个 String 类型的字符串。

JSON 值的格式
这里写图片描述
值(value):可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套使用。

二、JSON数据结构举例

下面是一个 JSON 数据格式的例子

  1. {
  2. "array": [1, 2, 3],
  3. "boolean": true,
  4. "null": null,
  5. "number": 123,
  6. "object": { "a": "b", "c": "d", "e": "f" },
  7. "string": "Hello World" }
  • array:值是一个整数类型的数组
  • boolean:值是一个布尔型的值
  • null:JSON 数据格式中的值允许为 null
  • number:值一个数值,可以是整数也可以是浮点数
  • object:值是一个 JSON 对象
  • string:值是一个字符串

三、在Java中使用JSONObject

这里以 Maven 的形式创建项目,如果你对 Maven 还不是很了解,可以下载对应的 jar 包。

pom.xml 中引入 JSONObject 依赖

  1. <dependency>
  2. <groupId>org.json</groupId>
  3. <artifactId>json</artifactId>
  4. <version>20180130</version>
  5. </dependency>

编写测试方法 jsonObjectTest()

  1. public static void jsonObjectTest() {
  2. JSONObject jsonObject = new JSONObject();
  3. Object obj = null;
  4. jsonObject.put("name", "张三");
  5. jsonObject.put("age", 20);
  6. jsonObject.put("birth", "1998-01-01");
  7. jsonObject.put("haveCar", obj);
  8. jsonObject.put("hasGirlfriend", true);
  9. jsonObject.put("likes", new String[]{
  10. "看电影", "看书"});
  11. if(!jsonObject.isNull("name")) {
  12. System.out.println(jsonObject.getString("name")); // 获取某个键对应的值
  13. }
  14. System.out.println(jsonObject.toString()); // 输出 JSON 字符串
  15. }

运行上面的代码输出的是不规则的字符串,你可以到https://jsoneditoronline.org/上对 JSON 数据进行格式化,下面是其显示效果
这里写图片描述
在字符串输出的时候会发现,输出的字符串与数据存储的顺序可能是不一致的。原因是调用jsonObject.put()方法的时候,其底层是一个 HashMap,数据被存到了HashMap 中。 HashMap 根据键的哈希码来决定键的位置,所以可能会出现上面的问题。下面是源代码
这里写图片描述
既然jsonObject.put() 方法的底层是对 HashMap 的操作,那么能否将一个 HashMap 转换成 JSON 数据呢?答案是可以的。原因是 JSONObject 类提供了一个构造函数,这个构造函数中接收的正是一个 Map。下面是源代码:
这里写图片描述

四、JavaBean TO JSON(JSONObject

在前后端交换数据的时候,后端通常会使用一个 JavaBean 把数据封装一下,然后将这个 JavaBean 转成 JSON 数据。下面我们就来这么做

JavaBean 对象User

  1. public class User {
  2. private String name;
  3. private int age;
  4. private String[] likes;
  5. // 省略 get 与 set 方法
  6. }

编写测试方法 beanToJsonTest()

  1. public static void beanToJsonTest() {
  2. User user = new User();
  3. user.setName("张三");
  4. user.setAge(20);
  5. user.setLikes(new String[]{
  6. "看电影", "看书"});
  7. JSONObject jsonObject = new JSONObject(user);
  8. System.out.println(jsonObject.toString());
  9. }

有兴趣的可以查看一下源码这个过程是如何完成的。

五、在Java中使用Gson

GSON 是 Google 的一个开源项目,其主要特点是可以将 JavaBean 转换成 JSON 数据,也可以将 JSON 数据转换成 JavaBean。

pom.xml 中引入 Gson 依赖

  1. <dependency>
  2. <groupId>com.google.code.gson</groupId>
  3. <artifactId>gson</artifactId>
  4. <version>2.8.2</version>
  5. </dependency>

JavaBean TO JSON(GSON):

测试方法beanToJsonTest()

  1. public static void beanToJsonTest() {
  2. User user = new User();
  3. user.setName("张三");
  4. user.setAge(20);
  5. user.setLike(new String[]{
  6. "看电影", "看书"});
  7. /** * 使用GsonBuilder 可以作一些额外处理,比如格式化输出,预处理等 * * GsonBuilder gsonBuilder = new GsonBuilder(); * gsonBuilder.setPrettyPrinting(); * Gson gson = gsonBuilder.create(); */
  8. Gson gson = new Gson();
  9. System.out.println(gson.toJson(user));
  10. }

JSON TO JavaBean(GSON):

改写 User 类(添加 Date 属性)

  1. public class User {
  2. private String name;
  3. private int age;
  4. private String[] likes;
  5. private Date birth;
  6. // 省略 get 与 set 方法
  7. }

测试方法jsonToBeanTest()

  1. public static void jsonToBeanTest() {
  2. String jsonStr = "{\"name\":\"李四\",\"age\":22 , \"like\":[\"看电影\",\"看书\"],\"birth\":\"1996-01-01\"}";
  3. GsonBuilder gsonBuilder = new GsonBuilder();
  4. // 设置日期转换格式
  5. gsonBuilder.setDateFormat("yyyy-MM--dd");
  6. Gson gson = gsonBuilder.create();
  7. User user = gson.fromJson(jsonStr, User.class);
  8. System.out.println(user.getBirth().toLocaleString());
  9. System.out.println(user.getLikes()[1]);
  10. }

PS:
现在 fastjson 使用的挺多的,fastjson 以速度快、使用简单、功能完备等优点深受广大程序员喜欢。有机会的话,还是要多了解一些。

发表评论

表情:
评论列表 (有 0 条评论,380人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java使用json

    > 闲聊  学着想放弃,放弃又没理由 > 常用的 JSON 解析类库 Java中并没有内置JSON的解析,因此使用JSON需要借助第三方类库。   [Gso