【JAVA】JSONObject.fromObject(message)引发的JSONObject 详解
// 将 JSON 字符串转换为 JSONObject 对象
JSONObject jsonObject = JSONObject.fromObject(message);
详情参考本博客 3.2,是net.sf.json库中的一个方法。
一、JsonObject 简介
JSONObject
是处理 JSON 数据的一个核心类,它提供了一种轻量级的数据结构,可以方便地解析和生成 JSON 格式的数据。以下是对 JSONObject
的一个简要介绍,包括其用途、基本操作和常用方法。
JSONObject 的用途
解析 JSON 字符串:将 JSON 格式的字符串解析成 Java 对象,以便于访问和操作其中的数据。
生成 JSON 字符串:将 Java 对象转换成 JSON 格式的字符串,以便于数据交换和存储。
二、JsonObject 基本操作
2.1 、创建 JSONObject
-
创建一个空的
JSONObject
import org.json.JSONObject; JSONObject jsonObject = new JSONObject();
-
从字符串创建 JSONObject:
String jsonString = "{ \"name\": \"John\", \"age\": 30, \"city\": \"New York\" }"; JSONObject jsonObject = new JSONObject(jsonString);
2.2、访问和操作 JSONObject
-
添加键值对:
jsonObject.put("name", "John"); jsonObject.put("age", 30); jsonObject.put("city", "New York");
-
获取值:
String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); String city = jsonObject.getString("city");
-
检查是否包含某个键:
boolean hasName = jsonObject.has("name");
-
移除键值对:
jsonObject.remove("city");
2.3 生成 JSON 字符串
-
将 JSONObject 转换为字符串:
String jsonString = jsonObject.toString();
2.4、示例代码
以下是一个完整的示例,展示如何创建、操作和生成 JSONObject:
import org.json.JSONObject;
public class JsonExample {
public static void main(String[] args) {
// 创建一个空的 JSONObject
JSONObject jsonObject = new JSONObject();
// 添加键值对
jsonObject.put("name", "John");
jsonObject.put("age", 30);
jsonObject.put("city", "New York");
// 获取值
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
String city = jsonObject.getString("city");
// 输出值
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("City: " + city);
// 转换为 JSON 字符串
String jsonString = jsonObject.toString();
System.out.println("JSON String: " + jsonString);
}
}
三、JsonObject 常见库
JSONObject
是用于处理 JSON 数据的一种数据结构。在使用 JSONObject 类时,你可以使用多种库,例如 org.json
、net.sf.json
、以及 com.fasterxml.jackson.databind(Jackson)。下面是使用这三种常见库处理 JSON 数据的示例。
常见的库比较
org.json:
优点:轻量级、易于使用。
缺点:功能相对简单,缺少高级特性。
/
net.sf.json(JSON-lib):
优点:功能全面,支持多种数据类型和复杂的 JSON 操作。
缺点:相对较旧,更新不频繁。
/
com.fasterxml.jackson.databind(Jackson):
优点:功能强大,支持高级数据绑定、数据流处理和注解。
缺点:相对较重,学习曲线稍高。
3.1、使用 org.json 库
org.json
是一个常用的轻量级 JSON 处理库。你可以从 Maven Central 获取其最新版本。
添加依赖(Maven)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
示例代码
import org.json.JSONObject;
public class JsonExample {
public static void main(String[] args) {
// 假设这是一个 JSON 格式的字符串
String message = "{ \"name\": \"John\", \"age\": 30, \"city\": \"New York\" }";
// 将 JSON 字符串转换为 JSONObject 对象
JSONObject jsonObject = new JSONObject(message);
// 输出 JSONObject 对象
System.out.println(jsonObject);
// 访问 JSON 对象的各个属性
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
String city = jsonObject.getString("city");
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("City: " + city);
}
}
3.2、使用 net.sf.json 库
net.sf.json
(JSON-lib)是一个老牌的 JSON 处理库。
添加依赖(Maven)
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
示例代码
import net.sf.json.JSONObject;
public class JsonExample {
public static void main(String[] args) {
// 假设这是一个 JSON 格式的字符串
String message = "{ \"name\": \"John\", \"age\": 30, \"city\": \"New York\" }";
// 将 JSON 字符串转换为 JSONObject 对象
JSONObject jsonObject = JSONObject.fromObject(message);
// 输出 JSONObject 对象
System.out.println(jsonObject);
// 访问 JSON 对象的各个属性
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
String city = jsonObject.getString("city");
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("City: " + city);
}
}
3.3、使用 Jackson 库
Jackson 是一个功能强大且常用的 JSON 处理库。
添加依赖(Maven)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.3</version>
</dependency>
示例代码
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class JsonExample {
public static void main(String[] args) {
// 假设这是一个 JSON 格式的字符串
String message = "{ \"name\": \"John\", \"age\": 30, \"city\": \"New York\" }";
// 创建 ObjectMapper 实例
ObjectMapper objectMapper = new ObjectMapper();
try {
// 将 JSON 字符串转换为 JsonNode 对象
JsonNode jsonNode = objectMapper.readTree(message);
// 输出 JsonNode 对象
System.out.println(jsonNode);
// 访问 JSON 对象的各个属性
String name = jsonNode.get("name").asText();
int age = jsonNode.get("age").asInt();
String city = jsonNode.get("city").asText();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("City: " + city);
} catch (IOException e) {
e.printStackTrace();
}
}
}
订阅该专栏《JAVA杂项》,从细节,粗俗易懂的学java!