JAVA小知识10:浅谈JSON与JSON转换

        可能有很多人,无论是前端还是后端,无论是JAVA还是Python还是C,都应该跟JSON这种数据格式打过交道,那么有没有仔细的想过,什么叫JSON?

        JSON是一种轻量级的数据交换格式。它基于JavaScript语言的对象表示法,但独立于其语言,几乎所有的编程语言都可以解析和生成JSON数据。JSON的设计初衷是为了易于人们阅读和编写,同时也易于机器解析和生成。

一、JSON的基本结构

它是由两种结构组成的:对象(object)和数组(array)。
在Java中的JSON处理库中,通常用 JSONObjectJSONArray 类来表示这两种结构。 

1.1 JSONObject

JSONObject代表一个JSON中的键值对象,这个对象以大括号包围每个键值对使用,隔开键与值使用:隔开,一个JSONObject类似于这样:

  • 对象是一个无序的“键/值对”集合。
  • 用花括号 { } 包裹。
  • 键必须是字符串,值可以是字符串、数字、布尔值、数组、对象或null。
{
  "name": "John",
  "age": 30,
  "isStudent": false,
  "address": {
    "street": "123 Main St",
    "city": "New York"
  }
}

1.2 JSONArray

在JSON中,JSONArray代表一个数组,使用中括号包围,每个元素使用逗号隔开。一个JSONArray类似于这样:

  • 数组是一个有序的值集合。
  • 用方括号 [] 包裹。
  • 数组中的值可以是任何类型,包括对象和其他数组。
[
  "Apple",
  "Banana",
  "Cherry"
]

1.3 JSON 的数据类型

JSON支持以下几种数据类型:

  • 字符串(String):必须用双引号包围。例如 "Hello World"
  • 数字(Number):可以是整数或浮点数。例如 42 或 3.14
  • 布尔值(Boolean):表示真或假,取值为 true 或 false
  • 数组(Array):一组有序的值。例如 ["apple", "banana", "cherry"]
  • 对象(Object):一组键值对。例如 {"name": "John", "age": 30}
  • null:表示空值。例如 null

1.4 相互关系:

  • JSONObject 和 JSONArray 是JSON数据结构的具体表示。
  • JSONObject 可以包含多个 JSONArray 作为其值,反之亦然,JSONArray 也可以包含多个 JSONObject 作为其元素
  • 它们可以互相嵌套,从而形成复杂的JSON结构。
{
  "name": "Alice",
  "age": 25,
  "isStudent": true,
  "grades": [90, 88, 92],
  "address": {
    "street": "456 Elm St",
    "city": "Los Angeles",
    "state": "CA"
  },
  "courses": [
    {"name": "Math", "credits": 3},
    {"name": "Science", "credits": 4}
  ]
}

我们看到 JSONObject 包含了多个键值对,其中一个值是 JSONArray,而 JSONArray 中的一个元素又是另一个 JSONObject。这展示了 JSONObjectJSONArray 如何通过嵌套来表达复杂的数据结构。

二、JSON的转换

在Java开发中,JSON、Bean、Map、List之间的相互转换非常常见,通常使用第三方库如来简化这些操作,这里我使用Hutool工具包来进行实例。

第一步:引入Hutool

在POM中引入Hutool:

<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.7.17</version>
</dependency>

2.1 Bean,List,Map转化为JSON

首先看实体类User

然后看我们的工具类:

JSONUtil.toJsonStr 方法可以将任意对象(Bean、Map、集合等)直接转换为JSON字符串。 如果对象是有序的Map等对象,则转换后的JSON字符串也是有序的。

 

结果为:

2.2 JSON转Bean

从SQL中可以查找的一般都直接转化为对象,但是Redis中经常存储的都是JSON格式,所以要进行转换,这里模拟的JSON数据

2.3 JSON转List

2.4 获取json中某个字段

2.5 JSON转化为数组

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Crow 库中,crow::json::rvalue 和 crow::json::wvalue 是两个不同的 JSON 类型,其中 crow::json::rvalue 是只读的 JSON 类型,而 crow::json::wvalue 是可写的 JSON 类型。 如果我们想要将 crow::json::wvalue 对象转换为 crow::json::rvalue 对象,可以直接将它们的引用进行转换,即: ```c++ const crow::json::rvalue& r = w; ``` 这里的 "w" 是一个 crow::json::wvalue 对象。 这种转换方式非常简单,因为 crow::json::rvalue 是 crow::json::wvalue 的基类,可以直接将 crow::json::wvalue 对象转换为 crow::json::rvalue 对象。 如果我们想要将 crow::json::rvalue 对象转换为 crow::json::wvalue 对象,则需要使用 crow::json::rvalue 类的成员函数 `dump()` 将其序列化为 JSON 字符串,然后使用 crow::json::load() 函数将其反序列化为一个 crow::json::wvalue 对象,例如: ```c++ const crow::json::rvalue& r = ...; std::string json_str = crow::json::dump(r); crow::json::wvalue w; crow::json::load(w, json_str); ``` 这里的 "r" 是一个 crow::json::rvalue 对象,`crow::json::dump(r)` 将其序列化为 JSON 字符串,然后使用 `crow::json::load()` 函数将其反序列化为一个 crow::json::wvalue 对象 "w"。 需要注意的是,由于 crow::json::wvalue 对象是可写的,因此在转换过程中可能会丢失一些信息。例如,如果 crow::json::rvalue 对象中包含一些只读的属性,这些属性在转换为 crow::json::wvalue 对象时可能会被忽略。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值