JSON
什么是JSON(如何理解?)
百度:JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
简单概括:一种轻量级(与xml作比较)的数据交换格式(客户端和服务器之间的业务数据的传递格式)
JSON基础
json由键值对组成,并由大(花)括号包围。每个键由引号引起来,键值之间用冒号分隔,多组键值对之间用逗号进行分割
json本身是一个对象,key就想是对象的属性,用json对象.key的方式对key进行访问。
JSON在Java中的使用
先导入jar包或者导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
<version>2.7.4</version>
<scope>compile</scope>
</dependency>
javaBean和json的互转
这里我们需要导入gson的依赖来帮助我们达到目的
<!-- 用于json和javabean互转-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
gson,typetoken
// 创建一个Gson对象
Gson gson = new Gson();
// 将Java对象转换为JSON字符串
String jsonString = gson.toJson(javaObject);
// 将JSON字符串转换回Java对象
JavaObject javaObject = gson.fromJson(jsonString, JavaObject.class);
List和json的互转
将List转换为JSON字符串,可以使用Gson的toJson()方法。示例代码如下:
List<JavaBean> javaBeanList = newArrayList<>();
// 添加元素到javaBeanList中...Gsongson=newGson();
StringjsonString= gson.toJson(javaBeanList);
将JSON字符串转换为List对象,需要使用TypeToken,因为在Java中泛型的类型信息在编译时会被擦除,因此需要使用TypeToken来获取类型信息。示例如下:
StringjsonString="[{\"foo\":\"fooValue\",\"bar\":\"barValue\"},{\"foo\":\"fooValue2\",\"bar\":\"barValue2\"}]";
Gsongson=newGson();
TypelistType=newTypeToken<List<JavaBean>>() {}.getType();
List<JavaBean> javaBeanList = gson.fromJson(jsonString, listType);
其中,JavaBean是自定义的Java类名称。注意,fromJson()方法的第二个参数是Type类型,用于指定要转换成的对象类型。如果直接使用List.class,会出现类型擦除导致编译错误。因此,需要使用匿名内部类的方式创建TypeToken对象。
map和json的互转
将Map转换为JSON字符串,可以使用Gson的toJson()方法。示例代码如下:
Map<String, Object> map = newHashMap<>();
// 向map中添加键值对...Gsongson=newGson();
StringjsonString= gson.toJson(map);
将JSON字符串转换为Map对象,可以先将JSON字符串转换为JsonElement对象,再从JsonElement对象中获取Map对象。示例如下:
StringjsonString="{\"foo\":\"fooValue\",\"bar\":{\"baz\":123}}";
Gsongson=newGson();
JsonElementjsonElement= gson.fromJson(jsonString, JsonElement.class);
Map<String, Object> map = gson.fromJson(jsonElement, newTypeToken<Map<String, Object>>() {}.getType());
其中,JsonElement是Gson库中的类,用于表示JSON数据的元素(可以是对象、数组、字符串等)。在上面的示例中,我们先将JSON字符串通过fromJson()方法转换为一个JsonElement对象,然后再从JsonElement对象中获取Map对象。由于要获取的Map对象的键和值的类型可能不确定,因此依然需要使用TypeToken来指定类型。