JSON串

JSON在客户端的使用

JSON 字符串的格式是基于键值对的数据结构,用于表示结构化数据。它遵循严格的语法规则,常用于前后端数据交互

1. 基本结构

  • JSON 数据结构由两种主要元素构成:
    • 对象(Object):用花括号 {} 包围,包含键值对。
    • 数组(Array):用方括号 [] 包围,包含多个值。
JSON 对象示例:
{ "name": "张三", "age": 25, "isStudent": true }
JSON 数组示例:
{ "subjects": ["Math", "Science", "History"] }

2. 数据类型

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

  • 字符串(String):必须用双引号 "" 括起来。
  • 数字(Number):整数或浮点数,不需要引号。
  • 布尔值(Boolean)truefalse,不需要引号。
  • 数组(Array):方括号 [] 包围,里面可以是任意类型的数据。
  • 对象(Object):花括号 {} 包围,里面是键值对。
  • 空值(null):表示空值,不需要引号。
示例:
{ "name": "张三", "age": 25, "isStudent": true,"grades": [85, 90, 95], "address": { "city": "北京", "postalCode": "100000" }, 
"graduationYear": null }

3. 语法规则

  • 双引号:所有的键名(key)和字符串类型的值都必须使用双引号 "",而不能使用单引号 '
  • 键值对:每对键和值之间用冒号 : 分隔。
  • 逗号分隔:多个键值对之间、数组元素之间必须用逗号 , 分隔,但最后一个元素后面不能有逗号。
  • 空格:可以在 JSON 字符串中添加空格或缩进以提高可读性,这对 JSON 解析没有影响。
示例:
{ "name": "张三", "age": 25, "isStudent": true, 
"subjects": ["Math", "Science", "History"] }

4. 嵌套结构

JSON 支持对象和数组的嵌套,这使得它能够表达复杂的结构。

示例:
{ "name": "张三", "age": 25, 
"dog": { "name": "小花", "age": 3 }, 
"friends": [ { "name": "李四", "age": 24 }, { "name": "王五", "age": 26 } ] 
}

在这个例子中,dog 是一个嵌套的对象,而 friends 是一个包含多个对象的数组。

将JSON串转为对象以及把对象转为JSON串的例子

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script>// 定义一个符合JSON格式的字符串var personStr = '{ "name": "张三", "age": 10, "dog": { "dname": "小花" }, "loveSingers": ["张小明", "王小东", "李小黑"],"friends": [{"fname": "李四"}, {"fname": "张三"}] }';// 通过JSON.parse()可以把一个JSON字符串转换为一个对象var person = JSON.parse(personStr);// console.log(personStr);// console.log(person);console.log(person.name);console.log(person.age);console.log(person.dog.dname);console.log(person.loveSingers[0]);console.log(person.friends[0].fname);// 通过JSON.stringify() 将一个对象转换为JSON串var personStr2 = JSON.stringify(person);</script>
</head>
<body></body>
</html>

JSON在服务器端的使用 

1. 将对象转换为 JSON 字符串

这个过程称为 序列化(Serialization),它将 Java 对象转换为 JSON 字符串,以便可以通过 HTTP 传输或者存储到数据库中。

核心步骤: 
  • 使用 ObjectMapper 类,它是 Jackson 提供的一个核心工具类,专门用于处理 JSON 数据。(需要手动导包)详细导包教程:IDEA2020 手动安装jackson (导包通法)_jackson如何引入idea-CSDN博客

        下载包的地址:

下载后搜索Jacksonicon-default.png?t=O83Ahttps://mvnrepository.com/

  • 调用 writeValueAsString(Object) 方法,将 Java 对象转换为 JSON 字符串。
public static void ObjectToString() throws JsonProcessingException {// 创建对象Dog dog = new Dog("招财");Person person = new Person("张三", 10, dog);// 将对象转换为 JSON 字符串ObjectMapper objectMapper = new ObjectMapper();String personStr = objectMapper.writeValueAsString(person);// 输出 JSON 字符串System.out.println(personStr);
}

 输出:

{"name": "张三","age": 10,"dog": {"name": "招财"}
}

2. 将 JSON 字符串转换为 Java 对象

这个过程称为 反序列化(Deserialization),它将 JSON 字符串转换为 Java 对象,以便在后端进行进一步的业务逻辑处理。

核心步骤:
  • 使用 ObjectMapper 类。
  • 调用 readValue(String, Class<T>) 方法,将 JSON 字符串转换为指定类型的 Java 对象。
public static void JsonToEObject() throws JsonProcessingException {// JSON 字符串String personStr = "{\"name\":\"张三\",\"age\":10,\"dog\":{\"name\":\"招财\"}}";// 将 JSON 字符串转换为对象ObjectMapper objectMapper = new ObjectMapper();Person person = objectMapper.readValue(personStr, Person.class);// 输出对象System.out.println(person);
}

调式时的控制台: 

3. 总结:如何在服务器端进行 JSON 和对象之间的转换

对象转换为 JSON 字符串(序列化)
  • 用途:当你需要将对象通过网络传输或存储为文本(如数据库中)时,通常将 Java 对象转换为 JSON 字符串。
  • 步骤
    1. 创建一个 Java 对象。
    2. 使用 ObjectMapper.writeValueAsString() 方法将对象转换为 JSON 字符串。
  • 常见场景
    • 将后端生成的对象通过 HTTP 响应发送到前端。
    • 将对象持久化为 JSON 格式存储。
JSON 字符串转换为对象(反序列化)
  • 用途:当你从外部接收到 JSON 数据(比如从前端接收到请求数据,或从数据库中读取 JSON 字符串)时,你通常需要将 JSON 字符串转换为 Java 对象进行处理。

  • 步骤

    1. 获取 JSON 字符串(从 HTTP 请求、数据库等)。
    2. 使用 ObjectMapper.readValue() 方法将 JSON 字符串转换为 Java 对象。
  • 常见场景

    • 从前端接收 JSON 请求体,将其转换为后端的业务对象。
    • 从数据库中读取存储的 JSON 数据,将其解析为对象用于处理。

JSON和Map/List/Array之间的转换:

1. JSON 和 Map 之间的转换

  • Map 是一种键值对的数据结构,适合与 JSON 对象的格式进行转换,因为 JSON 对象也是键值对的形式。
  • 在 Jackson 中,可以轻松地将 JSON 字符串转换为 Map<String, Object>,或者将 Map 转换为 JSON 字符串。
1.1 将 JSON 转换为 Map

使用 ObjectMapperreadValue() 方法将 JSON 字符串转换为 Map<String, Object>

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;public class JsonToMapExample {public static void main(String[] args) throws Exception {String jsonStr = "{\"name\":\"张三\", \"age\":30, \"dog\":{\"name\":\"小花\"}}";// 创建 ObjectMapperObjectMapper objectMapper = new ObjectMapper();// 将 JSON 转换为 MapMap<String, Object> resultMap = objectMapper.readValue(jsonStr, Map.class);// 输出 Map 内容System.out.println(resultMap);}
}

1.2 Map 转换为 JSON

 public  static void MapToJson() throws JsonProcessingException {Map data = new HashMap();data.put("a","value");data.put("b","value");ObjectMapper objectMapper = new ObjectMapper();String s = objectMapper.writeValueAsString(data);System.out.println(s);}

2. JSON 和 List 之间的转换

  • List 是一种有序的集合,适合与 JSON 数组进行相互转换。
  • 在 Jackson 中,List 和 JSON 数组之间的转换也是通过 ObjectMapper 实现的。
2.1 将 JSON 数组转换为 List

JSON 数组可以直接转换为 List,可以是 List<String>List<Integer>List<Map<String, Object>> 等。

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;public class JsonToListExample {public static void main(String[] args) throws Exception {String jsonArrayStr = "[\"张三\", \"李四\", \"王五\"]";// 创建 ObjectMapperObjectMapper objectMapper = new ObjectMapper();// 将 JSON 数组转换为 ListList<String> resultList = objectMapper.readValue(jsonArrayStr, new TypeReference<List<String>>() {});// 输出 List 内容System.out.println(resultList);}
}
2.2 List 转换为 JSON 数组

使用 writeValueAsString() 方法可以将 List 转换为 JSON 数组。

   public  static void ListToJson() throws JsonProcessingException {
//        List<String> data1 = new ArrayList<String>();
//        data1.add("a");
//        data1.add("b");
//        data1.add("c");
//
//        String [] data2 = {"a","b","c"};Dog dog = new Dog("招财");Person person = new Person("张三",10,dog);List<Person> data = new ArrayList<Person>();data.add(person);ObjectMapper objectMapper = new ObjectMapper();String s = objectMapper.writeValueAsString(data);System.out.println(s);}

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

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

相关文章

小阿轩yx-Zabbix企业级分布式监控环境部署

小阿轩yx-Zabbix企业级分布式监控环境部署 前言 “运筹帷幄之中&#xff0c;决胜千里之外”监控在 IT 运维中占据着重要地位&#xff0c;按比例说占 30% 也不为过在监控系统开源软件中有很多可选择的工具&#xff0c;但是真正符合要求的、能够真正解决业务问题的监控系统软件…

UML的图及其他图补充

一、UML图 1.类图 ‌类图‌是统一建模语言&#xff08;UML&#xff09;中的一种静态结构图&#xff0c;主要用于描述软件系统的静态结构。它显示了模型中的类、类的内部结构以及它们与其他类的关系。类图是面向对象建模的主要组成部分&#xff0c;用于对系统的词汇进行建模、对…

C语言:刷题日志(3)

一.猴子选大王 一群猴子要选新猴王。新猴王的选择方法是&#xff1a;让N只候选猴子围成一圈&#xff0c;从某位置起顺序编号为1~N号。从第1号开始报数&#xff0c;每轮从1报到3&#xff0c;凡报到3的猴子即退出圈子&#xff0c;接着又从紧邻的下一只猴子开始同样的报数。如此不…

打造高效实时数仓,从Hive到OceanBase的经验分享

本文作者&#xff1a;Coolmoon1202&#xff0c;大数据高级工程师&#xff0c;专注于高性能软件架构设计 我们的业务主要围绕出行领域&#xff0c;鉴于初期采用的数据仓库方案面临高延迟、低效率等挑战&#xff0c;我们踏上了探索新数仓解决方案的征途。本文分享了我们在方案筛选…

基本mysql

基础sql语句 关于数据库 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] database_name [CHARACTER SET charset_name] [COLLATE collation_name]; [ ] 代表可选 database_name 是你想要创建的数据库的名称。CHARACTER SET 可选&#xff…

一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention

一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention 目录 一区霜冰算法双向深度学习模型注意力机制&#xff01;RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法…

nlohmann::json中有中文时调用dump转string抛出异常的问题

问题描述 Winodows下C开发想使用一个json库&#xff0c;使用的nlohmann::json&#xff0c;但是遇到json中使用中文时&#xff0c;转成string&#xff0c;会抛出异常。 nlohmann::json contentJson;contentJson["chinese"] "哈哈哈";std::string test con…

K-means 算法的介绍与应用

目录 引言 K-means 算法的基本原理 表格总结&#xff1a;K-means 算法的主要步骤 K-means 算法的 MATLAB 实现 优化方法与改进 K-means 算法的应用领域 表格总结&#xff1a;K-means 算法的主要应用领域 结论 引言 K-means 算法是一种经典的基于距离的聚类算法&#xff…

气膜馆电费高吗?—轻空间

很多人关心气膜馆的电费问题&#xff0c;实际上&#xff0c;气膜馆不仅电费不高&#xff0c;还具有显著的节能优势。气膜建筑在设计上充分考虑了能耗管理&#xff0c;具备以下几大特点&#xff1a; 1. 高效保温隔热&#xff0c;减少能耗 气膜馆采用特殊材料和结构设计&#xf…

力扣100题——贪心算法

概述 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在解决问题时&#xff0c;按照某种标准在每一步都选择当前最优解&#xff08;局部最优解&#xff09;的算法。它期望通过一系列局部最优解的选择&#xff0c;最终能够得到全局最优解。 贪心算法的核心思想 贪心算…

【Colab代码调试】End-to-end reproducible AI pipelines in radiology using the cloud

文章目录 报错MessageError: Error: credential propagation was unsuccessful解决办法原理 找不到GPU解决办法 关于文件结构RTSTRUCT是什么nrrd是什么格式 !gcloud config set project $GCP_PROJECT_ID报错Access Denied: User does not have bigquery.jobs.create permission…

C# 比较对象新思路,利用反射技术打造更灵活的比较工具

前言 嘿&#xff0c;大家好&#xff01;如果你之前看过我分享的文章《C# 7个方法比较两个对象是否相等》&#xff0c;你可能会意识到对象比较在实际业务中经常出现的场景。今天&#xff0c;我想继续与大家分享一个在实际项目中遇到的问题。 有一次&#xff0c;我接手了一个别…

个人健康信息系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;健康分析师管理&#xff0c;健康手册管理&#xff0c;健康饮食管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;健康手册&#xff0c;健康饮食&…

从Apple Intelligence到IoT Intelligence,端侧生成式AI时代加速到来

9月10日凌晨1点&#xff0c;苹果新品发布会如期举行&#xff0c;全新iPhone16系列成为苹果生态中真正意义上的第一款原生AI手机&#xff0c;在第二代3nm工艺A18和A18 Pro芯片的加持下&#xff0c;iPhone16系列能够容纳并快速运行以Apple Intelligence为中心的生成式AI功能在手机…

Python 基本库用法:数学建模

文章目录 前言数据预处理——sklearn.preprocessing数据标准化数据归一化另一种数据预处理数据二值化异常值处理 numpy 相关用法跳过 nan 值的方法——nansum和nanmean展开多维数组&#xff08;变成类似list列表的形状&#xff09;重复一个数组——np.tile 分组聚集——pandas.…

从“游戏科学”到玄机科技:《黑神话:悟空》的视角打开动漫宇宙

近日&#xff0c;中国游戏界迎来了一场前所未有的盛事——由游戏科学公司开发的《黑神话&#xff1a;悟空》正式上线&#xff0c;并迅速成为全球玩家热议的焦点。在居高不下的讨论热度中&#xff0c;有人说他的成功在于对《西游记》为背景进行改编&#xff0c;对原著进行了分析…

数据分析与挖掘课程相关资源

这是在gitee上整的关于这门课的一个开源项目。 https://gitee.com/rainpet/python-data-analysis-and-mining-demo 头歌平台。 常见问题&#xff1a; 1、如何确认conda的版本&#xff0c;执行如下命令&#xff1a; conda list anaconda$2、实验室登陆后&#xff0c;无法上网&a…

基于Java+SpringBoot+Vue+MySQL的智能菜谱推荐管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的智能菜谱推荐管理系统【附源码文档】、…

“汉语新解” Prompt新高度,火爆的李继刚

“汉语新解” prompt 是由李继刚设计的一个用于启发人工智能模型进行创意性文本生成的指令模板。这个 prompt 的设计初衷是为了让AI能够以一种独特的方式解析和重新诠释常见的中文词汇&#xff0c;从而产生出具有深刻洞察力和幽默感的文本内容&#xff0c;仿佛是由鲁迅或林语堂…

装杯 之 Linux 指令1

hello&#xff0c;欢迎来到linux世界&#xff0c;在害没有学习linux时&#xff0c;看到别人操作&#xff0c;网课&#xff0c;真高级&#xff0c;感觉好厉害&#xff0c;就是说白了&#xff0c;看起来牛逼。ok&#xff0c;接下来&#xff0c;请大佬们进入linux之旅。 1.ls指令…