【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.jsonnet.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!

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值