📅  最后修改于: 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兼容
JSON.simple是Java的库,因此首要要求是在您的计算机上安装JDK。
JDK | 1.5 or above. |
---|---|
Memory | No minimum requirement. |
Disk Space | No minimum requirement. |
Operating System | No minimum requirement. |
首先,打开控制台并根据您正在使用的操作系统执行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是本教程的安装版本。
将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安装。
从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 |
将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 |
将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:. |
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"}]
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=/
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"}
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"}
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]
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
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"}
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"}]
属性类提供了将属性文本转换为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}
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 null1 1000.21 Robert
{"Active":true,"Details":null,"ID":1,"Fees":1000.21,"Name":"Robert"}
如果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.