org.json
简介
原文:https://www.studytonight.com/java-examples/introduction-to-orgjson
JSON 是 JavaScript 对象符号的缩写,是一种广泛用于存储和传输数据的文件格式。它使用人类可读的格式,以键值对或数组的形式存储数据。在本教程中,我们将学习如何在 org.json 库的帮助下在 Java 中使用 JSON。
org.json 图书馆
org.json 库为我们提供了许多使用 json 的类。它也被称为 Java-JSON 库。我们可以使用JSONObject
类来创建 JSON 对象。我们还可以通过使用 JSONArray 类来创建 JSON 数组。它还为 JSON 到其他格式的转换提供了方便的类和方法。
org.json 中的 JSONObject
- JSONObject 用于存储键值对。该键只能是非空字符串,但值可以是任何类型。
- put() 方法用于向 JSONObject 添加键值对。
- 我们可以使用 get(String key) 方法获取一个键对应的值。
- 我们也可以使用 opt(String key) 方法来获取与该键关联的对象。
- 这个类有很多可用的方法,但这些是最常用的。
下面的代码显示了这些方法的工作原理。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONObject jsonObj = new JSONObject();
jsonObj.put("one", 1);
jsonObj.put("two", "2");
jsonObj.put("three", false);
jsonObj.put("four", JSONObject.NULL);
System.out.println("The JSONObject is: " + jsonObj);
System.out.println("get(one): " + jsonObj.get("one"));
System.out.println("get(two): " + jsonObj.get("two"));
System.out.println("get(three): " + jsonObj.get("three"));
System.out.println("get(four): " + jsonObj.get("four"));
}
}
JSON object 为:{“四”:null,“一”:1、“二”:“二”、“三”:false} get(一):1 get(二):2 get(三):false get(四):null
使用映射创建 Using 对象
JSONObject 构造器可以采用一个映射实例,它将使用映射中存在的键值对来初始化 JSONObject。
import java.util.HashMap;
import java.util.Map;
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
Map<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
map.put("four", 4);
JSONObject jsonObj = new JSONObject(map);
System.out.print(jsonObj);
}
}
{“四”:4、“一”:1、“二”:2、“三”:3}
使用字符串创建 JSONObject
如果我们有一个有效的 JSON 字符串,那么我们可以使用这个字符串来初始化一个 JSON 对象。JSONObject 构造器可以用从 JSON 字符串中获得的键值对来初始化 JSONObject。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String jsonStr = "{\"one\":\"1\",\"two\":\"2\",\"three\":\"3\"}";
JSONObject jsonObj = new JSONObject(jsonStr);
System.out.print(jsonObj);
}
}
{“一”:“1”、“二”:“2”、“三”:“3”}
使用 Bean 类创建 JSONObject
我们可以将一个 Java Bean 类对象传递给 JSONObject 构造器,它将使用 Bean 对象中设置的类属性和值创建一个 JSON 对象。
为此,让我们使用下面的 Java Bean 类。
import java.io.Serializable;
public class Student implements Serializable
{
private String name;
private Double gpa;
Student(){}
Student(String s, Double d)
{
this.name = s;
this.gpa = d;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getGpa() {
return gpa;
}
public void setGpa(Double gpa) {
this.gpa = gpa;
}
}
现在,当我们使用这个类的一个实例创建一个 JSONObject 时,我们将使用名称和 GPA 作为键。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
Student student = new Student();
student.setName("Justin");
student.setGpa(8.50);
JSONObject jsonObj = new JSONObject(student);
System.out.print(jsonObj);
}
}
{“姓名”:“贾斯汀”、“GPA”:8.5 }
org.json 中的 JSONArray
- JSONArray 是一个有序的值集合。
- put() 方法用于向数组中添加值。这些值可以是任何类型。
- 我们可以使用 get() 方法通过它们的索引来获取这些值。
- JSONArray 表示为以方括号开始和结束的字符串,包含逗号分隔的值。
让我们使用上面讨论的方法创建一个 JSONArray。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONObject jsonObj = new JSONObject();
jsonObj.put("one", 1);
jsonObj.put("two", "2");
JSONArray jsonArr = new JSONArray();
//Adding values to the JSONArray
jsonArr.put("String");
jsonArr.put(100.0);
jsonArr.put(JSONObject.NULL);
jsonArr.put(jsonObj);
System.out.println(jsonArr);
System.out.println("Element at index 1:" + jsonArr.get(1));
System.out.println("Element at index 3:" + jsonArr.get(3));
}
}
[“String”,100,null,{“one”:1,“two”:“2”}] 索引 1 处的元素:100.0 索引 3 处的元素:{“one”:1,“two”:“2”}
使用字符串创建 JSONArray
JSONArray 构造器可以接受 JSON 字符串来初始化数组。确保传递给构造器的字符串是有效的 JSON 字符串。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String jsonStr = "[1, \"String\", false]";
JSONArray jsonArr = new JSONArray(jsonStr);
System.out.print(jsonArr);
}
}
【1,“弦”,假】
使用集合创建 JSONArray
我们也可以使用集合来初始化一个 JSONArray。JSONArray 构造器用于实现这一点。
import java.util.ArrayList;
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
ArrayList<String> arrList = new ArrayList<>();
arrList.add("one");
arrList.add("2");
arrList.add("three");
JSONArray jsonArr = new JSONArray(arrList);
System.out.print(jsonArr);
}
}
【“一”、“二”、“三”】
json 组织中的 JSONTokener
JSONTokener 类用于将字符串拆分成单个字符。这个类不常用。我们有其他流行的 Java 方法可以达到同样的结果。这个类被其他类(JSONObject 和 JSONArray)用来解析 JSON 字符串。
让我们尝试使用这个类来拆分字符串。我们将使用 more() 方法来检查 JSONTokener 是否包含更多的字符。我们将使用 next() 方法获取单个字符。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONTokener jsonTokener = new JSONTokener("This is a string.");
while(jsonTokener.more())
System.out.println(jsonTokener.next());
}
}
T h I s T5】I s T8】a T10】s T r I n g 。
org.json 中的逗号分隔列表
org.json 库的逗号分隔列表(CDL)类提供了 JSONObject 或 JSONArray 与逗号分隔文本之间的简单转换方法。我们还需要 JSONTokener 来进行一些转换。
逗号分隔文本中的字符串
我们可以将逗号分隔的字符串转换为 JSONArray,方法是首先使用 JSONTokener,然后使用 CDL 类的row to sonarray()方法。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String s = "This, is, a, string, .";
JSONTokener jsonTokener = new JSONTokener(s);
JSONArray jsonArrUsingCDL = CDL.rowToJSONArray(jsonTokener);
System.out.print(jsonArrUsingCDL);
}
}
【“这”、“是”、“一”、“串”、“”]
来自 JSONArray 的逗号分隔文本
要将我们的 JSONArray 转换为逗号分隔的字符串,我们可以使用 CDL 类的 rowToString() 方法。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String s1 = "This, is, a, string, .";
JSONTokener jsonTokener = new JSONTokener(s1);
//String to JSONArray
JSONArray jsonArrUsingCDL = CDL.rowToJSONArray(jsonTokener);
System.out.println("JSON Array: " + jsonArrUsingCDL);
//JSONArray to String
String s2 = CDL.rowToString(jsonArrUsingCDL);
System.out.print("String from JSON Array: " + s2);
}
}
JSON 数组:【“这个”“是”“一个”“字符串”、】】【JSON 数组中的字符串:这是一个字符串。
逗号分隔文本中的 JSONObjects 数组
我们可以将字符串格式化为头(或键)和 JSONObject 值,以创建一个 JSONObjects 数组。我们将使用 CDL 类的 toJSONArray()方法。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String jsonObjs = "name, gpa, regNo \n" //Headers
+ "Justin, 8.21, 101 \n"//First JSONObject
+ "Jessica, 8.55, 102 \n"; //Second JSONObject
JSONArray jsonArr = CDL.toJSONArray(jsonObjs);
System.out.println("First JSONObject in the JSONArray: " + jsonArr.get(0));
System.out.println("First JSONObject in the JSONArray: " + jsonArr.get(1));
}
}
JSON array 中的第一个 JSON object:{“regNo”:“101”、“name”:“Justin”、“GPA”:“8.21”} JSON array 中的第一个 JSON object:{“regNo”:“102”、“name”:“Jessica”、“GPA”:“8.55”}
toJSONArray()有一个重载方法,可以将另一个 JSONArray() 作为参数。这个 JSONArray 将包含 JSONObjects 的头(或键)。我们还需要一个包含 JSONObject 值的字符串。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONArray header = new JSONArray();
header.put("Name");
header.put("GPA");
header.put("RegNo");
String jsonObjs = "Justin, 8.21, 101 \n"//First JSONObject
+ "Jessica, 8.55, 102 \n"; //Second JSONObject
JSONArray jsonArr = CDL.toJSONArray(header, jsonObjs);
System.out.println("First JSONObject in the JSONArray: " + jsonArr.get(0));
System.out.println("First JSONObject in the JSONArray: " + jsonArr.get(1));
}
}
JSON array 中的第一个 JSON object:{“RegNo”:“101”、“GPA”:“8.21”、“Name”:“Justin”} JSON array 中的第一个 JSON object:{“RegNo”:“102”、“GPA”:“8.55”、“Name”:“Jessica”}
org.json 的 Cookie 类
org.json 库包含一个 Cookie 类,可以将 web 浏览器的 cookies 转换为 JSONObjects,并将 JSONObjects 转换回 cookies。
Cookie 字符串中的 JSONObject
我们将使用这个类的to sonobject()来执行转换。确保表示 cookies 的字符串格式正确。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String cookie = "username = Justin Kan; expires = Thu, 5 Jul 2021 12:00:00 UTC; path = /\"";
JSONObject jsonObjCookie = Cookie.toJSONObject(cookie);
System.out.println(jsonObjCookie);
}
}
{“路径”:“/\”、“到期时间”:“世界协调时 2021 年 7 月 5 日星期四 12:00:00”、“名称”:“用户名”、“值”:“Justin Kan”}
JSONObject 中的 Cookie 字符串
这个类的 toString() 方法可以将包含 cookie 的 JSONObject 转换成字符串。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
//String cookie to JSONObject
String cookie = "username = Justin Kan; expires = Thu, 5 Jul 2021 12:00:00 UTC; path = /\"";
JSONObject jsonObjCookie = Cookie.toJSONObject(cookie);
//JSONObject to String cookie
String cookieFromJsonObj = Cookie.toString(jsonObjCookie);
System.out.print(cookieFromJsonObj);
}
}
用户名= Justin Kan 过期时间=世界协调时 2021 年 7 月 5 日星期四 12:00:00;路径=/”
组织类
org.json 库的 HTTP 类用于 HTTP 头和 JSONObjects 之间的转换。
HTTP 头字符串中的 JSONObject
就像 Cookie 类一样,HTTP 类也包含一个to sonobject()方法。这用于将一个 HTTP 头字符串转换为一个 JSONObject。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String httpString = "POST \"http://www.somesite.com/\" HTTP/1.1";
JSONObject httpJsonObj = HTTP.toJSONObject(httpString);
System.out.print("HTTP JSON Object: " + httpJsonObj);
}
}
HTTP JSON 对象:{“请求-URI”:“HTTP://www . somesite . com/”、“方法”:“POST”、“HTTP-Version”:“HTTP/1.1”}
来自 from 对象的 HTTP 头字符串
HTTP 类还包含 toString() 方法,该方法可以将包含 HTTP 头的 JSONObject 转换为字符串。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONObject httpJsonObj = new JSONObject();
httpJsonObj.put("Method", "POST");
httpJsonObj.put("Request-URI", "http://www.somesite.com/");
httpJsonObj.put("HTTP-Version", "HTTP/1.1");
System.out.println("HTTP JSON Object: " + httpJsonObj);
String stringFromHttpJsonObj = HTTP.toString(httpJsonObj);
System.out.println("String from HTTP JSON Object: " + stringFromHttpJsonObj);
}
}
HTTP JSON 对象:{“Request-URI”:“HTTP://www . somesite . com/”、“Method”:“POST”、“HTTP-Version”:“HTTP/1.1”} 字符串来自 HTTP JSON 对象:POST“HTTP://www . somesite . com/”HTTP/1.1
jsoneexception
在使用 org.json 库时,我们会经常遇到 JSONException。此异常还包含一条描述错误背后原因的消息。让我们看一看引发此错误的几个场景。
当我们使用无效密钥时,JSONException
如果我们尝试使用 get()方法获取一个 JSONObject 值,但该键不存在,将会返回此错误。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONObject jsonObj = new JSONObject();
jsonObj.put("one", 1);
jsonObj.put("two", "2");
jsonObj.put("three", false);
jsonObj.put("four", JSONObject.NULL);
System.out.println(jsonObj.get("five"));//Invalid Key
}
}
线程“main”org . JSON . jsonexception 中出现异常:未找到 JSONObject[“五”]。 在 org . JSON . JSON object . get(JSON object . Java:516) 在 Demo.main(Demo.java:13)
当我们使用无效的 JSON 字符串时,会出现 JSON 异常
我们学习了一些不同的方法,在这些方法中,我们将 JSON 字符串用于不同的目的。但是,如果字符串不是有效的 JSON 格式,那么我们将得到 JSONException。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
String jsonStr = "one : 1, two: 2, three: 3";
JSONObject jsonObj = new JSONObject(jsonStr);
System.out.print(jsonObj);
}
}
线程“main”中的异常 org.json.JSONException:一个 JSONObject 文本必须在 org . JSON . jsontkener . syntaxerror(jsontkener . Java:413)
在 org . JSON . JSON object .
当我们使用无效的 JSONArray 索引时,出现 JSONException
通常,如果我们试图使用一个无效的索引,我们会得到一个 ArrayIndexOutOfBounds 异常。对于 JSONArrays,我们将获得 JSONException。
import org.json.*;
public class Demo
{
public static void main(String[] args) throws JSONException
{
JSONArray jsonArr = new JSONArray();
//Adding values to the JSONArray
jsonArr.put("String");
jsonArr.put(100.0);
jsonArr.put(JSONObject.NULL);
System.out.println("Element at index 10:" + jsonArr.get(10));//Invalid Index
}
}
线程“main”org . JSON . jsonexception 中出现异常:未找到 JSONArray[10]。 在 org . JSON . jsonarray . get(jsonarray . Java:247) 在 Demo.main(Demo.java:13)
摘要
json.org 是一个流行的 Java 包,用于与 JSON 一起工作。在本教程中,我们看了这个包的一些最重要的类和方法。我们还了解了 JSONException,这个包的所有类都使用它。