【JAVA】JSONObject.fromObject(message)引发的JSONObject 详解

【JAVA】JSONObject.fromObject(message)引发的JSONObject 详解

    • 一、JsonObject 简介
    • 二、JsonObject 基本操作
      • 2.1 、创建 JSONObject
      • 2.2、访问和操作 JSONObject
      • 2.3 生成 JSON 字符串
      • 2.4、示例代码
    • 三、JsonObject 常见库
      • 3.1、使用 org.json 库
      • 3.2、使用 net.sf.json 库
      • 3.3、使用 Jackson 库

 // 将 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) {// 创建一个空的 JSONObjectJSONObject 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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8的Stream API的使用说明,轻松实现集合的各种转换

Java 8中的Stream API为函数式编程带来了极大的便利&#xff0c;使得处理集合数据变得更加高效和简洁。以下是关于Java 8 Stream API的使用说明&#xff0c;我会尽量按照清晰的结构进行分点表示和归纳&#xff1a; 一、Stream API的基本概念 Stream&#xff1a;Stream是Java 8…

Educational Codeforces Round 158 B. Chip and Ribbon (贪心)

有一条带子&#xff0c;分为 n 个单元格&#xff0c;从左到右编号为 1 至 n 。最初&#xff0c;每个单元格中都写入了一个整数 0 。 单细胞与芯片玩游戏。游戏由几个回合组成。在第一轮中&#xff0c;Monocarp 将芯片放入色带的 1 -st 单元中。除了第一轮之外&#xff0c;在每…

SSM基于微信小程序的校园表白墙的设计与实现-计算机毕业设计源码58219

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;校园表白墙微信小程序被用户普遍使用&#xff0c;为方便用…

Java面试八股之自旋是什么意思

Java中的自旋是什么意思 自旋是多线程编程中的一种同步机制&#xff0c;尤其在Java中与锁的实现密切相关。当一个线程尝试获取某个锁&#xff08;如内置锁或显式锁&#xff09;时&#xff0c;如果锁已被其他线程持有&#xff0c;通常的做法是将该线程置于阻塞状态&#xff0c;…

图形学概述

图形学应用 游戏 游戏的画面好坏如何鉴定呢&#xff1f; 看游戏画面是否够亮&#xff1a;渲染中全局光照的好坏 《只狼》 为什么卡通游戏画面看起来是卡通的呢&#xff1f; 《无主之地3》 这些都是图形学需要着手解决的问题 电影 电影《黑客帝国》的特效也是通过计算机…

软件测试面试题(九)

一&#xff1a;说说你对SQA的职责和工作活动的理解&#xff1f; 答&#xff1a;SQA就是独立于软件开发的项目组&#xff0c;通过软件开发过程的监控&#xff0c;来保证软件开发流程按照指定的CMM规程&#xff0c;对于不符合项目及时提出来的建议和改进方案&#xff0c;必要是可…

HTTPS加密过程

今天我们说https具体工作原理。 HTTPS概念 HTTPS是一种网络协议&#xff0c;传统的HTTP是明文传输&#xff0c;非常 不安全&#xff0c;所以HTTPS是基于HTTP基础上进行加密传输内容。 HTTPS使用加密传输方式 第一种是非对称加密&#xff0c;是前期建立连接时候使用的数据加密…

Unity 直线间隔放置物体

直线间隔放置物体 0. 新建一个空物体&#xff0c;挂上脚本ZYF_QuickPlaceObj 设置 间隔距离 和 预制体在Scene中拖动即可按间隔距离实例化物体物体的朝向始终朝向统一方向&#xff0c;并且可以在Scene中拖拽更改 传送门

QML-1- qml简介及项目创建

文章目录 1. QML 简介2. 项目创建3. 目录结构4. CMakeLists.txt 简单介绍5. 运行demo 1. QML 简介 根据官网介绍&#xff0c;qml 为qt一个模块&#xff0c;使用Qml语言开发应用程序和库提供了一个框架。它定义并实现了语言和引擎基础结构&#xff0c;并提供了一个API&#xff…

jQuery事件导读+其它方法

jQuery 事件导读一、事件注册二、事件处理1.内容2.例子&#xff0c;微博绑定事件3.off解绑事件4.自动触发事件 三、事件对象 其他方法一、拷贝对象二、多库共存三、插件 事件导读 一、事件注册 单个事件叫注册&#xff0c;多个事件叫处理 二、事件处理 1.内容 2.例子&#…

Pytorch中乘法函数torch.matmul() 的一种用法

主要记录下torch.matmul(A,B)的用法中的一种情况&#xff1a; 当A&#xff0c;B有一个是3维以上&#xff0c;另一个是3维或3维以上时&#xff0c;如果想要使用torch.matmul(A,B)&#xff0c;必须同时满足&#xff1a; 1.A和B的最后两个维度满足矩阵乘法的要求。例如A的维度是…

今日上新——FCP

今年2月&#xff0c;我们FCC-E产品全新上线了专有D区&#xff0c;专门满足用户对高性价比的稀缺大机型需求。 产品研发组的小伙伴们根本停不下来~ 才几个月&#xff0c;我们又又上新了&#xff01; 今天的新品是FCP&#xff08;fastone Compute Platform&#xff09;&#x…

VMware ESXi中安装Proxmox VE

0、巴拉巴拉 前几天某行业HW&#xff0c;闲暇的时候几个技术人员聊天&#xff0c;臭味相投的聊到自己玩的东西。有个玩家说家里用工作站安装Proxmox VE&#xff0c;然后在上面安装软路由、安装NAS。我以前一直想玩玩&#xff0c;没有付诸行动&#xff0c;所以也想弄个集中的方案…

分享目前堪称最好用的车机桌面app,支持画中画模式!

好用的车机桌面了&#xff0c;支持悬浮画中画&#xff01; 如果你想改变单调的车机桌面&#xff0c;那么这篇文章你不要错过了&#xff01;支持地图悬浮、画中画的车机桌面&#xff0c;不要错过&#xff01; 今天阿星给大家分享3款好用、好看的大屏桌面软件&#xff0c;重要的…

如何在Namecheap上购买域名

文章目录 如何在Namecheap上购买国外域名&#xff0c;话不多说直接上步骤↓1&#xff1a;注册Namecheap账号2&#xff1a;选购域名3&#xff1a;如何付款4&#xff1a;付款购买域名5&#xff1a;总结 如何在Namecheap上购买国外域名&#xff0c;话不多说直接上步骤↓ 原文链接…

学习双向链表带哨兵demo

定义 在计算机科学中&#xff0c;链表是数据元素的线性集合&#xff0c;其每个元素都指向下一个元素&#xff0c;元素存储上并不连续。 双向链表&#xff0c;每个元素知道其上一个元素和下一个元素。 以下为示例代码&#xff1a; package com.tfq.arithmetic.linkedlist;imp…

Flask 蓝图路由的模块化开发

基于 Flask 蓝图路由的模块化开发 1. 编程目标 为了提高Flask应用的可维护性和可扩展性&#xff0c;我们通过使用Flask的蓝图(Blueprint)功能&#xff0c;可以将不同的功能模块拆分到独立的文件中&#xff0c;方便后续的开发和维护。 2. 项目结构 项目结构树如下&#xff1…

C++设计模式之单例模式、模板模式、状态模式、原型模式、CRTP 模式、组件模式、观察者模式、发布-订阅模式、访问者模式

文章目录 参考 参考 游戏开发中经常用到的设计模式【C】游戏开发常用的设计模式&#xff0c;高手都这样写&#xff1f;单例模式、组件模式、原型模式、访问者模式等

假如Redis⾥里里⾯面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

使⽤用 keys 指令可以扫出指定模式的 key 列列表。但是要注意 keys 指令会导致线程阻塞⼀一段时间&#xff0c;线上服务会停 顿&#xff0c;直到指令执⾏行行完毕&#xff0c;服务才能恢复。这个时候可以使⽤用 scan 指令&#xff0c; scan 指令可以⽆无阻塞的提取出指定模式 的…

高斯过程学习笔记

目录 基础知识 例子 推荐 A Visual Exploration of Gaussian Processes (distill.pub) AB - Introduction to Gaussian Processes - Part I (bridg.land) 基础知识 高斯过程回归&#xff08;Gaussian Process Regression&#xff09; - 知乎 (zhihu.com) 高斯过程&#x…