📜  org.json-快速指南

📅  最后修改于: 2020-11-12 05:11:25             🧑  作者: Mango


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

特征

  • 符合规范-JSON.simple完全符合JSON规范RFC4627。

  • 轻量级-它只有很少的类,并提供必要的功能,例如编码/解码和转义json。

  • XML转换-它提供从JSON到XML的转换能力,反之亦然。

  • HTTP标头-支持将HTTP标头转换为JSON,反之亦然。

  • Cookie-支持将Cookie转换为JSON,反之亦然。

  • CDL-提供支持,以逗号分隔的列表转换为JSON,反之亦然。

  • 无依赖性-无外部库依赖性。可以独立包含。

  • Java 1.6-1.8兼容-源代码和二进制文件与Java 1.6-1.8兼容

org.json-环境设置

本地环境设置

JSON.simple是Java的库,因此首要要求是在您的计算机上安装JDK。

系统要求

JDK 1.5 or above.
Memory No minimum requirement.
Disk Space No minimum requirement.
Operating System No minimum requirement.

步骤1:验证机器中的Java安装

首先,打开控制台并根据您正在使用的操作系统执行Java命令。

OS Task Command
Windows Open Command Console c:\> java -version
Linux Open Command Terminal $ java -version
Mac Open Terminal machine:< joseph$ java -version

让我们验证所有操作系统的输出-

OS Output
Windows

java version “1.8.0_101”

Java(TM) SE Runtime Environment (build 1.8.0_101)

Linux

java version “1.8.0_101”

Java(TM) SE Runtime Environment (build 1.8.0_101)

Mac

java version “1.8.0_101”

Java(TM) SE Runtime Environment (build 1.8.0_101)

如果您的系统上未安装Java,请从以下链接www.oracle.com下载Java软件开发工具包(SDK)。我们假定Java 1.8.0_101是本教程的安装版本。

步骤2:设定JAVA环境

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

OS Output
Windows Set the environment variable JAVA_HOME to C:\Program Files\Java\jdk1.8.0_101
Linux export JAVA_HOME = /usr/local/java-current
Mac export JAVA_HOME = /Library/Java/Home

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

OS Output
Windows Append the string C:\Program Files\Java\jdk1.8.0_101\bin at the end of the system variable, Path.
Linux export PATH = $PATH:$JAVA_HOME/bin/
Mac not required

如上所述,使用命令java -version验证Java安装。

步骤3:下载org.json存档

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

OS Archive name
Windows json-20180813.jar
Linux json-20180813.jar
Mac json-20180813.jar

步骤4:设定JSON_JAVA环境

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

Sr.No OS & Description
1

Windows

Set the environment variable JSON_JAVA to C:\JSON

2

Linux

export JSON_JAVA = /usr/local/JSON

3

Mac

export JSON_JAVA = /Library/JSON

步骤5:设置CLASSPATH变量

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

Sr.No OS & Description
1

Windows

Set the environment variable CLASSPATH to %CLASSPATH%;%JSON_JAVA%\json-20180813.jar;.;

2

Linux

export CLASSPATH = $CLASSPATH:$JSON_JAVA/json-20180813.jar:.

3

Mac

export CLASSPATH = $CLASSPATH:$JSON_JAVA/json-20180813.jar:.

org.json-CDL

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

示例中涵盖了以下方法。

  • rowToJSONArray(String) -将逗号分隔的文本转换为JSONArray对象。

  • rowToString(JSONArray) -将JSONArray转换为逗号分隔的文本。

  • toJSONArray(String) -将多行逗号分隔的文本转换为JSONArray对象的Object。

  • toJSONArray(JSONArray,String) -将JSONArray对象和逗号分隔的文本转换为JSONArray对象。

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));
   }
}

输出

["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"}]

org.json-Cookie

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

示例中涵盖了以下方法。

  • toJSONObject(String) -将cookie文本转换为JSONObject对象。

  • toString(JSONObject) -将JSONObject转换为cookie文本。

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));        
   }
}

输出

{"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列表是名称/值对的序列。

示例中涵盖了以下方法。

  • toJSONObject(String) -将cookie列表文本转换为JSONObject对象。

  • toString(JSONObject) -将JSONObject转换为cookie列表文本。

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));
   }
}

输出

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

org.json-HTTP

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

示例中涵盖了以下方法。

  • toJSONObject(String) -将标题文本转换为JSONObject对象。

  • toString(JSONObject) -将JSONObject转换为标题文本。

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));
   }
}

输出

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是值的有序序列。它提供了按索引访问值和放置值的方法。支持以下类型-

  • 布尔型

  • JSONArray

  • JSONObject

  • JSONObject.NULL对象

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);
   }
}

输出

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

org.json-JSONML

JSONML类提供了将XML文本转换为JSONArray的静态方法,反之亦然。

示例中涵盖了以下方法。

  • toJSONArray(String) -将XML转换为JSONArray对象。

  • toJSONObject(String) -将XML转换为JSONObject对象。

  • toString(JSONArray) -从JSONArray对象提供XML。

  • toString(JSONObject) -从JSONObject对象提供XML。

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);
   }
}

输出

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

org.json-JSONObject

JSONObject类是键-值对的无序集合。它提供了通过键访问值和放置值的方法。支持以下类型-

  • 布尔型

  • JSONArray

  • JSONObject

  • JSONObject.NULL对象

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);
   }
}

输出

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

org.json-JSONStringer

JSONStringer是一个实用程序类,用于快速构建JSON文本,以确认JSON语法规则。 JSONStringer的每个实例都可以产生一个JSON文本。

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);
   }
}

输出

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

org.json-属性

属性类提供了将属性文本转换为JSONObject的静态方法,反之亦然。

示例中涵盖了以下方法。

  • toJSONObject(Properties) -将属性数据转换为JSONObject对象。

  • toProperties(JSONObject) -将JSONObject转换为属性对象。

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));
   }
}

输出

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的静态方法,反之亦然。

示例中涵盖了以下方法。

  • toJSONObject(String) -将XML转换为JSONArray对象。

  • toString(JSONObject) -从JSONObject对象提供XML。

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);
      System.out.println(xmlText);

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

输出

true
null
11000.21Robert {"Active":true,"Details":null,"ID":1,"Fees":1000.21,"Name":"Robert"}

org.json-JSONException处理

如果JSON无效,则org.json实用程序类将引发JSONException。下面的示例演示如何处理JSONException。

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 = "null";
         System.out.println(xmlText);

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

输出

position: 24
Unexpected token RIGHT BRACE(}) at position 24.