首页 > 编程笔记 > Java笔记 阅读:11

Java JSON数据的编码和解码(附带实例)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。所谓轻量级,是与 XML 文档结构相比而言的。因为描述项目的字符少,所以描述相同数据所需的字符个数要少,那么传输速度就会提高,而流量却会减少。

构成 JSON 文档的两种结构为对象和数组。对象是“名称-值”对集合,它类似于 Java 中的 Map 类型,而数组是一连串元素的集合。

对象是一个无序的“名称-值”对集合,一个对象以“{”(左大括号)开始,“}”(右大括号)结束。每个“名称”后跟一个“:”(冒号),“名称-值”对之间使用“,”(逗号)分隔。JSON对象的语法表如下图所示。


图 1 JSON对象的语法表

下面是一个 JSON 对象的例子:
{
  "name": "a.htm",
  "size": 345,
  "saved": true
}
数组是值的有序集合,以“[”(左中括号)开始,“]”(右中括号)结束,值之间使用“,”(逗号)分隔。JSON 数组的语法表如下图所示。


图 2 JSON数组的语法表

下面是一个 JSON 数组的例子:
["text","html","css"]
在数组中,值可以是双引号括起来的字符串、数值、true、false、null、对象或者数组,而且这些结构可以嵌套。数组中的 JSON 值如下图所示。


图 3 JSON值

Java使用第三方JSON库

由于目前 Java 官方没有提供 JSON 编码和解码所需要的类库,因此需要使用第三方 JSON库,这里推荐 JSON-java 库。

JSON-java 库提供源代码,最重要的是它不依赖于其他第三方库,不需要再去找其他的库。可以通过网址 https://github.com/stleary/JSON-java 下载源代码。可以访问 API 在线文档 http://stleary.github.io/JSON-java/index.html。

下载 JSON-java 库源代码文件,解压后的文件如下图所示,其中源代码文件在 src\main\java 目录下,org\json 是包。


图 4 解压后的文件

将 JSON-java 库源代码文件添加到 IntelliJ IDEA 工程中,需要将 JSON-java 库中 src\main\java 目录下的源代码(org 文件夹)复制到 IntelliJ IDEA 工程的 src 文件夹中,如下图所示。


图 5 将JSON-java库源代码文件添加到IntelliJ IDEA工程

由于操作系统的资源管理器与 IntelliJ IDEA 工具之间可以互相复制粘贴,IntelliJ IDEA 中复制和粘贴操作的快捷键和快捷菜单与操作系统下完全一样。

JSON数据编码和解码

JSON 在进行数据交换时,它们存在的形式就是一个很长的字符串,这个字符串在网络中传输或者存储于磁盘等介质中。在传输和存储之前需要把 JSON 数据转换成为字符串,这个过程称为“编码”过程。接收方需要将接收到的字符串转换成为 JSON 数据,这个过程称为“解码”过程。

编码和解码过程就像发电报时发送方把语言变成能够传输的符号,而接收时要将符号转换成为能够看懂的语言。

下面具体介绍一下 JSON 数据的编码和解码过程。

1) 编码示例代码如下:
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

// JSON 数据编码和解码
public class CodeExample {
    public static void main(String args[]) {
        // {"name": "tony", "age": 30, "a": [1, 3]}
        try {
            JSONObject jsonObject = new JSONObject(); // 创建 JSONObject (JSON 对象)
            jsonObject.put("name", "tony");             // 添加数据项到 jsonObject
            jsonObject.put("age", 30);                 // 添加数据项到 jsonObject

            JSONArray jsonArray = new JSONArray();    // 创建 JSONArray
            jsonArray.put(1).put(3);                   // 向 JSON 数组中添加 1 和 3 两个元素
            jsonObject.put("a", jsonArray);            // 将 JSON 数组添加到 JSON 对象中

            // 编码完成
            System.out.println(jsonObject.toString()); // 将 JSON 对象转换为字符串
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
运行上述示例,控制台输出结果:

{"a":[1,3],"name":"tony","age":30}


2) 编码示例代码如下:
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class DecodingExample {
    public static void main(String args[]) {
        // JSON 字符串
        String jsonString = "{\"name\":\"tony\", \"age\":30, \"a\":[1, 3]}";

        try {
            // 通过 JSON 字符串创建 JSON 对象
            JSONObject jsonObject = new JSONObject(jsonString);
            // 从 JSON 对象中按照名称取出 JSON 中对应的数据
            String name = jsonObject.getString("name");
            System.out.println("name : " + name);

            int age = jsonObject.getInt("age");
            System.out.println("age : " + age);

            // 取出一个 JSON 数组对象
            JSONArray jsonArray = jsonObject.getJSONArray("a");
            // 取出 JSON 数组第一个元素
            int n1 = jsonArray.getInt(0);
            System.out.println("数组 a 第一个元素 : " + n1);
            int n2 = jsonArray.getInt(1);
            System.out.println("数组 a 第二个元素 : " + n2);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}
运行上述示例,控制台输出结果:

name:tony
age:30
数组a第一个元素:1
数组a第二个元素:3

相关文章