Org Json 简明教程

Org.Json - Quick Guide

org.json - Overview

org.json or JSON-Java 是一个简单的基于 Java 的 JSON 工具包。你可以使用 org.json 来编码或解码 JSON 数据。

Features

  1. Specification Compliant − JSON.simple 完全符合 JSON 规范 - RFC4627。

  2. Lightweight − 它只有很少的类,并提供了必要的 JSON 编码/解码和转义功能。

  3. XML Conversion − 它提供了从 JSON 到 XML 和反之的转换能力。

  4. HTTP Headers − 支持将 HTTP 头转换到 JSON,反之亦然。

  5. Cookie − 提供对将 Cookie 转换到 JSON,反之亦然的支持。

  6. CDL − 提供对将逗号分隔列表转换为 JSON,反之亦然的支持。

  7. No dependency − 无需外部库依赖。可以独立包含。

  8. Java 1.6-1.11 compatible − 源代码和二进制文件与 Java 1.6-1.11 兼容

org.json - Environment Setup

本章带你完成在基于 Windows 和 Linux 的系统上设置 Org.Json 的过程。遵循一些简单的步骤,无需任何复杂的设置过程,即可轻松安装 Org.Json 并将其与当前 Java 环境集成。安装时需要用户管理。

System Requirements

JDK

Java SE 2 JDK 1.5 或更高版本

Memory

1 GB RAM (recommended)

Disk Space

No minimum requirement

Operating System Version

Windows XP 或更高版本、Linux

让我们继续进行安装 Org.Json 的步骤。

Step 1: Verify your Java Installation

首先,你的系统中需要安装 Java 软件开发工具包 (SDK)。要验证这一点,请根据所使用的平台执行以下两个命令。

如果 Java 安装已正确完成,则它将显示 Java 安装的当前版本和规范。以下表中给出了一个示例输出。

Platform

Command

Sample Output

Windows

打开命令控制台并输入 - >java –version

java version "11.0.11" 2021-04-20 LTSJava™ SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)Java HotSpot™ 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

Linux

打开命令终端并输入 - $java –version

java version "11.0.11" 2021-04-20 LTSOpen JDK Runtime Environment 18.9 (build 11.0.11+9-LTS-194)Open JDK 64-Bit Server VM (build 11.0.11+9-LTS-194, mixed mode)

  1. 我们假设本教程的读者已在他们的系统中安装了 Java SDK 版本 11.0.11。

  2. 如果您没有 Java SDK,请从 www.oracle.com/technetwork/java/javase/downloads/index.html 下载其当前版本并将其安装。

Step 2: Set your Java Environment

设置环境变量 JAVA_HOME 以指向计算机上安装 Java 的基本目录位置。例如,

Sr.No.

Platform & Description

1

Windows Set JAVA_HOME to C:\ProgramFiles\java\jdk11.0.11

2

Linux Export JAVA_HOME = /usr/local/java-current

将 Java 编译器位置的完整路径附加到系统路径。

Sr.No.

Platform & Description

1

Windows 将字符串“C:\Program Files\Java\jdk11.0.11\bin”附加到系统变量 PATH 的末尾。

2

Linux Export PATH = $PATH:$JAVA_HOME/bin/

如上所述,从命令提示符执行命令 java -version

Step 3: Install Org.Json Library

org.json @ MVNRepository 下载最新版本的 org.json jar 文件。在编写本教程时,我们已下载 json-20211205,并将其复制到 C:\>JSON 文件夹中。

OS

Archive name

Windows

json-20180813.jar

Linux

json-20180813.jar

Mac

json-20180813.jar

Step 4: Set JSON_JAVA Environment

设置 JSON_JAVA 环境变量以指向 org.json jar 存储在你机器上的基本目录位置。我们假设我们已将 json-20211205.jar 存储在 JSON 文件夹中。

Sr.No

OS & Description

1

Windows 将环境变量 JSON_JAVA 设置为 C:\JSON

2

Linux export JSON_JAVA = /usr/local/JSON

3

Mac export JSON_JAVA = /Library/JSON

Step 5: Set CLASSPATH Variable

CLASSPATH 环境变量设置为指向 JSON.simple jar 所在位置。

Sr.No

OS & Description

1

Windows 将环境变量 CLASSPATH 设置为 %CLASSPATH%;%JSON_JAVA%\json-20211205.jar;.;

2

Linux export CLASSPATH = $CLASSPATH:$JSON_JAVA/json-20211205.jar:.

3

Mac export CLASSPATH = $CLASSPATH:$JSON_JAVA/json-20211205.jar:.

org.json - CDL

CDL 类提供了将逗号分隔文本转换为 JSONArray,反之亦然,的静态方法。

以下方法在示例中介绍。

  1. rowToJSONArray(String) − 将逗号分隔文本转换为 JSONArray 对象。

  2. rowToString(JSONArray) − 将 JSONArray 转换为逗号分隔文本。

  3. toJSONArray(String) − 将多行逗号分隔文本转换为 JSONArray 对象的对象。

  4. toJSONArray(JSONArray, String) − 将 JSONArray 对象和逗号分隔文本转换为 JSONArray 对象。

Example

import org.json.CDL;
import org.json.JSONArray;
import org.json.JSONTokener;

public class JSONDemo {
   public static void main(String[] args) {
      String csvData = "INDIA, UK, USA";

      //Case 1: CSV to JSON Array
      JSONArray jsonArray = CDL.rowToJSONArray(new JSONTokener(csvData));
      System.out.println(jsonArray);

      //Case 2: JSONArray to CSV
      System.out.println(CDL.rowToString(jsonArray));

      //Case 3: CSV to JSONArray of Objects
      csvData = "empId, name, age \n" +
         "1, Mark, 22 \n" +
         "2, Robert, 35 \n" +
         "3, Julia, 18";
      System.out.println(CDL.toJSONArray(csvData));

      //Case 4: CSV without header
      jsonArray = new JSONArray();
      jsonArray.put("empId");
      jsonArray.put("name");
      jsonArray.put("age");
      csvData = "1, Mark, 22 \n" + "2, Robert, 35 \n" + "3, Julia, 18";
      System.out.println(CDL.toJSONArray(jsonArray,csvData));
   }
}

Output

["INDIA","UK","USA"]
INDIA,UK,USA

[{"name":"Mark","empId":"1","age":"22"},
   {"name":"Robert","empId":"2","age":"35"},
   {"name":"Julia","empId":"3","age":"18"}]
[{"name":"Mark","empId":"1","age":"22"},
   {"name":"Robert","empId":"2","age":"35"},
   {"name":"Julia","empId":"3","age":"18"}]

Cookie 类提供了将 Web 浏览器的 cookie 文本转换为 JSONObject,反之亦然,的静态方法。

以下方法在示例中介绍。

  1. toJSONObject(String) − 将 cookie 文本转换为 JSONObject 对象。

  2. toString(JSONObject) − 将一个 JSONObject 转换为一个 Cookie 文本。

Example

import org.json.Cookie;
import org.json.JSONObject;

public class JSONDemo {
   public static void main(String[] args) {
      String cookie = "username = Mark Den; expires = Thu, 15 Jun 2020 12:00:00 UTC; path = /";

      //Case 1: Converts Cookie String to JSONObject
      JSONObject jsonObject = Cookie.toJSONObject(cookie);
      System.out.println(jsonObject);

      //Case 2: Converts JSONObject to Cookie String
      System.out.println(Cookie.toString(jsonObject));
   }
}

Output

{"path":"/","expires":"Thu, 15 Jun 2020 12:00:00 UTC","name":"username","value":"Mark Den"}
username=Mark Den;expires=Thu, 15 Jun 2020 12:00:00 UTC;path=/

org.json - CookieList

CookieList 类提供静态方法将 Cookie 列表转换为 JSONObject,反之亦然。Cookie 列表是由名称/值对序列构成的。

以下方法在示例中介绍。

  1. toJSONObject(String) − 将 Cookie 列表文本转换为 JSONObject 对象。

  2. toString(JSONObject) − 将 JSONObject 转换为 Cookie 列表文本。

Example

import org.json.Cookie;
import org.json.CookieList;
import org.json.JSONObject;

public class JSONDemo {
   public static void main(String[] args) {
      String cookie = "username = Mark Den; expires = Thu, 15 Jun 2020 12:00:00 UTC; path = /";

      //Case 1: Converts Cookie String to JSONObject
      JSONObject cookieJSONObject = Cookie.toJSONObject(cookie);

      JSONObject cookielistJSONObject = new JSONObject();
      cookielistJSONObject.put(cookieJSONObject.getString("name"),
         cookieJSONObject.getString("value"));

      String cookieList = CookieList.toString(cookielistJSONObject);
      System.out.println(cookieList);
      System.out.println(CookieList.toJSONObject(cookieList));
   }
}

Output

username=Mark Den
{"username":"Mark Den"}

org.json - HTTP

HTTP 类提供静态方法,用于将 Web 浏览器的头部文本转换为一个 JSONObject,反之亦然。

以下方法在示例中介绍。

  1. toJSONObject(String) − 将头部文本转换为一个 JSONObject 对象。

  2. toString(JSONObject) − 将一个 JSONObject 转换为头部文本。

Example

import org.json.HTTP;
import org.json.JSONObject;

public class JSONDemo {
   public static void main(String[] args) {
      JSONObject jsonObject = new JSONObject();
      jsonObject.put("Method", "POST");
      jsonObject.put("Request-URI", "http://www.tutorialspoint.com/");
      jsonObject.put("HTTP-Version", "HTTP/1.1");

      //Case 1: Converts JSONObject of Header to String
      String headerText = HTTP.toString(jsonObject);
      System.out.println(headerText);

      headerText = "POST \"http://www.tutorialspoint.com/\" HTTP/1.1";
      //Case 2: Converts Header String to JSONObject
      System.out.println(HTTP.toJSONObject(headerText));
   }
}

Output

POST "http://www.tutorialspoint.com/" HTTP/1.1

{"Request-URI":"http://www.tutorialspoint.com/","Method":"POST","HTTP-Version":"HTTP/1.1"}

org.json - JSONArray

JSONArray 是一个有序的值序列。它提供按索引访问值和放置值的方法。支持以下类型 −

  1. Boolean

  2. JSONArray

  3. JSONObject

  4. Number

  5. String

  6. JSONObject.NULL object

Example

import org.json.JSONArray;
import org.json.JSONObject;

public class JSONDemo {
   public static void main(String[] args) {
      JSONArray list = new JSONArray();

      list.put("foo");
      list.put(new Integer(100));
      list.put(new Double(1000.21));
      list.put(new Boolean(true));
      list.put(JSONObject.NULL);

      System.out.println("JSONArray: ");
      System.out.println(list);
   }
}

Output

JSONArray:
["foo",100,1000.21,true,null]

org.json - JSONML

JSONML 类提供静态方法,用于将 XML 文本转换为一个 JSONArray,反之亦然。

以下方法在示例中介绍。

  1. toJSONArray(String) − 将 XML 转换为一个 JSONArray 对象。

  2. toJSONObject(String) − 将 XML 转换为一个 JSONObject 对象。

  3. toString(JSONArray) − 从一个 JSONArray 对象中提供 XML。

  4. toString(JSONObject) − 从一个 JSONObject 对象中提供 XML。

Example

import org.json.JSONArray;
import org.json.JSONML;
import org.json.JSONObject;

public class JSONDemo {
   public static void main(String[] args) {
      JSONArray list = new JSONArray();
      list.put("name");
      list.put("Robert");

      System.out.println("XML from a JSONArray: ");
      String xml = JSONML.toString(list);
      System.out.println(xml);

      System.out.println("JSONArray from a XML: ");
      list = JSONML.toJSONArray(xml);
      System.out.println(list);

      System.out.println("JSONObject from a XML: ");
      JSONObject object = JSONML.toJSONObject(xml);
      System.out.println(object);

      System.out.println("XML from a JSONObject: ");
      xml = JSONML.toString(object);
      System.out.println(xml);
   }
}

Output

XML from a JSONArray:
<name>Robert</name>
JSONArray from a XML:
["name","Robert"]
JSONObject from a XML:
{"childNodes":["Robert"],"tagName":"name"}
XML from a JSONObject:
<name>Robert</name>

org.json - JSONObject

JSONObject 类是无序的键值对集合。它提供以键访问值和放入值的方法。支持以下类型:

  1. Boolean

  2. JSONArray

  3. JSONObject

  4. Number

  5. String

  6. JSONObject.NULL object

Example

import org.json.JSONArray;
import org.json.JSONObject;

public class JSONDemo {
   public static void main(String[] args) {
      JSONObject jsonObject = new JSONObject();
      jsonObject.put("Name", "Robert");
      jsonObject.put("ID", 1);
      jsonObject.put("Fees", new Double(1000.21));
      jsonObject.put("Active", new Boolean(true));
      jsonObject.put("Other Details", JSONObject.NULL);

      JSONArray list = new JSONArray();
      list.put("foo");
      list.put(new Integer(100));
      jsonObject.put("list",list);
      System.out.println(jsonObject);
   }
}

Output

{"Active":true,"Other Details":null,"ID":1,"Fees":1000.21,"list":["foo",100],"Name":"Robert"}

org.json - JSONStringer

JSONStringer 是一个快速建立 JSON 文本的实用类,符合 JSON 语法规则。JSONStringer 的每个实例可以生成一个 JSON 文本。

Example

import org.json.JSONStringer;

public class JSONDemo {
   public static void main(String[] args) {
      String jsonText = new JSONStringer()
         .object()
         .key("Name")
         .value("Robert")
         .endObject()
         .toString();
      System.out.println(jsonText);

      jsonText = new JSONStringer()
         .array()
         .value("Robert")
         .value("Julia")
         .value("Dan")
         .endArray()
         .toString();
      System.out.println(jsonText);

      jsonText = new JSONStringer()
         .array()
         .value("Robert")
         .value("Julia")
         .value("Dan")
         .object()
         .key("Name")
         .value("Robert")
         .endObject()
         .endArray()
         .toString();
      System.out.println(jsonText);
   }
}

Output

{"Name":"Robert"}
["Robert","Julia","Dan"]
["Robert","Julia","Dan",{"Name":"Robert"}]

org.json - Property

Property 类提供静态方法以将属性文本转换到 JSONObject,反之亦然。

以下方法在示例中介绍。

  1. toJSONObject(Properties) − 将属性数据转换为 JSONObject 对象。

  2. toProperties(JSONObject) − 将 JSONObject 转换为属性对象。

Example

import java.util.Properties;
import org.json.JSONObject;
import org.json.Property;

public class JSONDemo {
   public static void main(String[] args) {
      Properties properties = new Properties();
      properties.put("title", "This is a title text");
      properties.put("subtitle", "This is a subtitle text");

      System.out.println("Properties to JSON");
      JSONObject jsonObject = Property.toJSONObject(properties);
      System.out.println(jsonObject);

      System.out.println("JSON to properties");
      System.out.println(Property.toProperties(jsonObject));
   }
}

Output

Properties to JSON
{"subtitle":"This is a subtitle text","title":"This is a title text"}
JSON to properties
{subtitle = This is a subtitle text, title = This is a title text}

org.json - XML

XML 类提供静态方法,用于将 XML 文本转换为一个 JSONObject,反之亦然。

以下方法在示例中介绍。

  1. toJSONObject(String) − 将 XML 转换为一个 JSONArray 对象。

  2. toString(JSONObject) − 从一个 JSONObject 对象中提供 XML。

Example

import org.json.JSONObject;
import org.json.XML;

public class JSONDemo {
   public static void main(String[] args) {
      JSONObject jsonObject = new JSONObject();
      jsonObject.put("Name", "Robert");
      jsonObject.put("ID", 1);
      jsonObject.put("Fees", new Double(1000.21));
      jsonObject.put("Active", new Boolean(true));
      jsonObject.put("Details", JSONObject.NULL);

      //Convert a JSONObject to XML
      String xmlText = XML.toString(jsonObject);

      //Convert an XML to JSONObject
      System.out.println(XML.toJSONObject(xmlText));
   }
}

Output

<Active>true</Active><Details>null</Details><ID>1</ID><Fees>1000.21</Fees><Name>Robert</Name>
{"Active":true,"Details":null,"ID":1,"Fees":1000.21,"Name":"Robert"}

org.json - JSONException Handling

org.json 的实用程序类在 JSON 无效的情况下会引发 JSONException。以下示例显示如何处理 JSONException。

Example

import org.json.JSONException;
import org.json.XML;

public class JSONDemo {
   public static void main(String[] args) {
      try{
         //XML tag name should not have space.
         String xmlText = "<Other Details>null</Other Details>";
         System.out.println(xmlText);

         //Convert an XML to JSONObject
         System.out.println(XML.toJSONObject(xmlText));
      }
      catch(JSONException e){
         System.out.println(e.getMessage());
      }
   }
}

Output

<Other Details>null</Other Details>
Misshaped close tag at 34 [character 35 line 1]