在 Java 中使用 JSON

一、JSON概述

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

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

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

二、JSON数据结构举例

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

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

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

pom.xml 中引入 JSONObject 依赖

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

编写测试方法 jsonObjectTest()

    public static void jsonObjectTest() {
        JSONObject jsonObject = new JSONObject();
        Object obj = null;

        jsonObject.put("name", "张三");
        jsonObject.put("age", 20);
        jsonObject.put("birth", "1998-01-01");
        jsonObject.put("haveCar", obj);
        jsonObject.put("hasGirlfriend", true);
        jsonObject.put("likes", new String[]{"看电影", "看书"});

        if(!jsonObject.isNull("name")) {
            System.out.println(jsonObject.getString("name"));    // 获取某个键对应的值
        }

        System.out.println(jsonObject.toString());    // 输出 JSON 字符串
    }

运行上面的代码输出的是不规则的字符串,你可以到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

public class User {
    private String name;
    private int age;
    private String[] likes;
    // 省略 get 与 set 方法
}

编写测试方法 beanToJsonTest()

    public static void beanToJsonTest() {
        User user = new User();

        user.setName("张三");
        user.setAge(20);
        user.setLikes(new String[]{"看电影", "看书"});

        JSONObject jsonObject = new JSONObject(user);
        System.out.println(jsonObject.toString());
    }

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

五、在Java中使用Gson

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

pom.xml 中引入 Gson 依赖

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>

JavaBean TO JSON(GSON):

测试方法beanToJsonTest()

    public static void beanToJsonTest() {
        User user = new User();

        user.setName("张三");
        user.setAge(20);
        user.setLike(new String[]{"看电影", "看书"});

        /**
        * 使用GsonBuilder 可以作一些额外处理,比如格式化输出,预处理等
        * 
        * GsonBuilder gsonBuilder = new GsonBuilder();
        * gsonBuilder.setPrettyPrinting();    
        * Gson gson = gsonBuilder.create();
        */
        Gson gson = new Gson();
        System.out.println(gson.toJson(user));
    }

JSON TO JavaBean(GSON):

改写 User 类(添加 Date 属性)

public class User {
    private String name;
    private int age;
    private String[] likes;
    private Date birth;
    // 省略 get 与 set 方法
}

测试方法jsonToBeanTest()

    public static void jsonToBeanTest() {
        String jsonStr = "{\"name\":\"李四\",\"age\":22
            , \"like\":[\"看电影\",\"看书\"],\"birth\":\"1996-01-01\"}";
        GsonBuilder gsonBuilder = new GsonBuilder();
        // 设置日期转换格式
        gsonBuilder.setDateFormat("yyyy-MM--dd");   
        Gson gson = gsonBuilder.create();
        User user = gson.fromJson(jsonStr, User.class);

        System.out.println(user.getBirth().toLocaleString());
        System.out.println(user.getLikes()[1]);
    }

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

  • 13
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用JSON,我们通常需要引入一个JSON库,例如Google的Gson库或者阿里巴巴的Fastjson库。以下是使用Gson库解析JSON字符串的示例代码: ```java import com.google.gson.Gson; public class JsonExample { public static void main(String[] args) { String jsonStr = "{\"name\":\"张三\",\"age\":20,\"gender\":\"男\"}"; Gson gson = new Gson(); User user = gson.fromJson(jsonStr, User.class); System.out.println(user.getName()); // 输出“张三” System.out.println(user.getAge()); // 输出“20” System.out.println(user.getGender()); // 输出“男” } } class User { private String name; private int age; private String gender; // getter和setter方法省略 } ``` 以上代码,我们定义了一个User类,用于存储从JSON字符串解析出的数据。我们使用Gson库的`fromJson()`方法将JSON字符串转换为Java对象。需要注意的是,我们需要指定目标对象的类型,这里使用`User.class`表示将JSON字符串转换为User对象。之后,我们就可以通过User对象的getter方法获取解析后的数据了。 当然,我们也可以使用Gson库将Java对象转换为JSON字符串,例如: ```java User user = new User(); user.setName("李四"); user.setAge(25); user.setGender("女"); Gson gson = new Gson(); String jsonStr = gson.toJson(user); System.out.println(jsonStr); // 输出“{"name":"李四","age":25,"gender":"女"}” ``` 以上代码,我们定义了一个User对象,并使用Gson库的`toJson()`方法将其转换为JSON字符串。需要注意的是,我们在User类定义了getter和setter方法,以便Gson库能够正确地访问和修改对象的属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值