网站的站点建设分为,具有价值的广州做网站,免费logo图片生成器 自动生成,wordpress 评论跳转文章目录 概述JSON 发展史什么是 JSON为什么要使用 JSONJSON 的不足JSON 应该如何存储什么时候会使用 JSON1) 定义接口2) 序列化3) 生成 Token4) 配置文件 Json分类json-lib开源的JacksonGoogle的Gson阿里巴巴的FastJsonJSON.simple JSON 序列化方式有哪些消息队列中传输的数据… 文章目录 概述JSON 发展史什么是 JSON为什么要使用 JSONJSON 的不足JSON 应该如何存储什么时候会使用 JSON1) 定义接口2) 序列化3) 生成 Token4) 配置文件 Json分类json-lib开源的JacksonGoogle的Gson阿里巴巴的FastJsonJSON.simple JSON 序列化方式有哪些消息队列中传输的数据格式JSON 对象还是 JSON 字符串指定JSON字段与Java属性之间的映射关系的注解1. fastjson.JSONField注解2. jackson.annotation.JsonProperty注解 json工具 概述
JSON 是一种轻量级的数据交换格式它是基于 JavaScript 的一个子集采用完全独立于编程语言的格式来表示数据可以跨语言、跨平台使用。简洁清晰的层次结构使得 JSON 逐渐替代了 XML成为了最理想的数据交换格式广泛应用于 Web 开发领域。 JSON 全称“JavaScript Object Notation”译为“JavaScript 对象简谱”或“JavaScript 对象表示法”是一种轻量级的、基于文本的、开放的数据交换格式。JSON 在 Web 开发领域有着举足轻重的地位如果您想在 Web 开发领域大展身手的话就必须了解 JSON。 数据交换是指两个设备之间建立连接并互相传递数据的过程。 尽管 JSON 的名称中包含“JavaScript”但它并不是只能在 JavaScript 中使用大多数编程语言都支持 JSON有些本身就支持有些可以通过第三方库得到支持例如 JavaScript、Java、PHP、Python、C 等。 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式但是也使用了类似于C语言家族的习惯包括C, C, C#, Java, JavaScript, Perl, Python等。 这些特性使JSON成为理想的数据交换语言。 JSON 是一种用于数据交换的文本格式诞生于 2001 年由Douglas Crockford提出目的是取代繁琐笨重的XML格式。这种格式不仅人很容易进行阅读和编写同时机器也很容易解析和生成是当前十分流行的数据格式尤其是在前端领域。 JSON全称是 JavaScript Object Notation即 JavaScript 对象标记法。这是一种 轻量级 Light-Weight、 基于文本的 Text-Based、 可读的 Human-Readable格式。 JSON 无论对于人还是对于机器来说都是十分便于阅读和书写的而且相比 XML 文件更小 JSON 格式的创始人声称此格式永远不升级这就表示这种格式具有长时间的稳定性 JSON格式有两个显著的优点书写简单一目了然符合JavaScript原生语法可以由解释引擎直接处理不用另外添加解析代码。 JSON已经成为各大网站交换数据的标准格式并被写入ECMAScript 5成为标准的一部分。 简单说每个JSON对象就是一个值。要么是简单类型的值要么是复合类型的值但是只能是一个值不能是两个或更多的值。这就是说每个JSON文档只能包含一个值。
JSON对值的类型和格式有严格的规定 复合类型的值只能是数组或对象不能是函数、正则表达式对象、日期对象。 简单类型的值只有四种字符串、数值必须以十进制表示、布尔值和null不能使用NaN, Infinity,-Infinity和undefined。 字符串必须使用双引号表示不能使用单引号。 对象的键名必须放在双引号里面。 数组或对象最后一个成员的后面不能加逗号。 PS: 需要注意的是空数组和空对象都是合格的JSON值null本身也是一个合格的JSON值。
JSON 发展史
2000 年初Douglas Crockford道格拉斯·克罗克福特发明了 JSON并从 2001 年开始推广使用。同年 4 月位于旧金山湾区某车库的一台计算机发出了首个 JSON 格式的数据这是计算机历史上的重要时刻。 2005-2006 年JSON 正式成为主流的数据格式雅虎、谷歌等知名网站开始广泛使用 JSON 格式。 2013 年ECMA International欧洲计算机制造商协会制定了 JSON 的语法标准——ECMA-404。 经过 20 年左右的发展JSON 已经替代了 XML成为了 Web 开发中首选的数据交换格式。
什么是 JSON
JSON 是一种纯字符串形式的数据它本身不提供任何方法函数非常适合在网络中进行传输。JavaScript、PHP、Java、Python、C 等编程语言中都内置了处理 JSON 数据的方法。 JSON 是基于 JavaScriptStandard ECMA-262 3rd Edition - December 1999的一个子集是一种开放的、轻量级的数据交换格式采用独立于编程语言的文本格式来存储和表示数据易于程序员阅读与编写同时也易于计算机解析和生成通常用于在 Web 客户端浏览器与 Web 服务器端之间传递数据。
为什么要使用 JSON
JSON 并不是唯一能够实现在互联网中传输数据的方式除此之外还有一种 XML 格式。JSON 和 XML 能够执行许多相同的任务那么我们为什么要使用 JSON而不是 XML 呢 之所以使用 JSON最主要的原因是 JavaScript。众所周知JavaScript 是 Web 开发中不可或缺的技术之一而 JSON 是基于 JavaScript 的一个子集JavaScript 默认就支持 JSON而且只要您学会了 JavaScript就可以轻松地使用 JSON不需要学习额外的知识。 另一个原因是 JSON 比 XML 的可读性更高而且 JSON 更加简洁更容易理解。 与 XML 相比JSON 具有以下优点 结构简单、紧凑与 XML 相比JSON 遵循简单、紧凑的风格有利于程序员编辑和阅读而 XML 相对比较复杂 更快JSON 的解析速度比 XML 更快因为 XML 与 HTML 很像在解析大型 XML 文件时需要消耗额外的内存存储同样的数据JSON 格式所占的存储空间更小 可读性高JSON 的结构有利于程序员阅读。
JSON 的不足
任何事物都不可能十全十美JSON 也不例外比如 只有一种数字类型JSON 中只支持 IEEE-754 双精度浮点格式因此您无法使用 JSON 来存储许多编程语言中多样化的数字类型 没有日期类型在 JSON 中您只能通过日期的字符串例如1970-01-01或者时间戳例如1632366361来表示日期 没有注释在 JSON 中无法添加注释 冗长虽然 JSON 比 XML 更加简洁但它并不是最简洁的数据交换格式对于数据量庞大或用途特殊的服务您需要使用更加高效的数据格式。
JSON 应该如何存储
JSON 数据可以存储在 .json 格式的文件中与 .txt 格式类似都属于纯文本文件也可以将 JSON 数据以字符串的形式存储在数据库、Cookie、Session 中。 要使用存储好的 JSON 数据也非常简单不同的编程语言中提供了不同的方法来检索和解析 JSON 数据例如 JavaScript 中的 JSON.parse() 和 JSON.stringify()、PHP 中的 json_decode() 和 json_encode()。
什么时候会使用 JSON
简单了解了 JSON 之后我们再来看看什么时候适合使用 JSON。
1) 定义接口
JSON 使用最多的地方莫过于 Web 开发领域了现在的数据接口基本上都是返回 JSON 格式的数据比如 使用 Ajax 异步加载的数据 RPC 远程调用 前后端分离后端返回的数据 开发 API例如百度、高德的一些开放接口。 这些接口一般都会提供一个接口文档说明接口调用的方法、需要的参数以及返回数据的介绍等。
2) 序列化
程序在运行时所有的变量都是存储在内存中的如果程序重启或者服务器宕机这些数据就会丢失。一般情况下运行时变量并不是很重要丢了就丢了但有些数据则需要保存下来供下次程序启动或其它程序使用。 我们可以将这些数据保存到数据库中也可以保存到一个文件中这个将内存中数据保存起来的过程称为序列化。序列化在 Python 中称为 pickling在其他语言中也被称为 serialization、marshalling、flattening 等等都是一个意思。 通常情况下序列化是将程序中的对象直接转换为可保存或者可传输的数据但这样会保存对象的类型信息无法做到跨语言使用例如我们使用 Python 将数据序列化到硬盘然后使用 Java 来读取这份数据这时由于不同编程语言的数据类型不同就会造成读取失败。如果在序列化之前先将对象信息转换为 JSON 格式则不会出现此类问题。
3) 生成 Token
Token 的形式多种多样JSON、字符串、数字等都可以用来生成 TokenJSON 格式的 Token 最有代表性的是 JWTJSON Web Tokens。 随着技术的发展分布式 Web 应用越来越普及通过 Session 管理用户登录状态的成本越来越高因此慢慢发展为使用 Token 做登录身份校验然后通过 Token 去取 Redis 中缓存的用户信息。随着之后 JWT 的出现校验方式变得更加简单便捷无需再通过 Redis 缓存而是直接根据 Token 读取保存的用户信息。
4) 配置文件
我们还可以使用 JSON 来作为程序的配置文件最具代表型的是 npmNode.js 的包管理工具的 package.json 包管理配置文件如下所示 { “name”: “server”, “version”: “0.0.0”, “private”: true, “main”: “server.js”, “scripts”: { “start”: “node ./bin/www” }, “dependencies”: { “cookie-parser”: “~1.4.3”, “debug”: “~2.6.9”, “express”: “~4.16.0”, “http-errors”: “~1.6.2”, “jade”: “~1.11.0”, “morgan”: “~1.9.0” } }
提示虽然 JSON 可以用来定义配置文件但由于 JSON 中不能添加注释使得配置文件的可读性较差。 JSON 的语法规则
在 JSON 中使用以下两种方式来表示数据 Object对象键/值对名称/值的集合使用花括号 { } 定义。在每个键/值对中以键开头后跟一个冒号:最后是值。多个键/值对之间使用逗号, 分隔例如{“name”:“C语言中文网”,“url”:“http://c.biancheng.net”} Array数组值的有序集合使用方括号 [ ] 定义数组中每个值之间使用逗号, 进行分隔。 下面展示了一个简单的 JSON 数据 { “Name”:“C语言中文网”, “Url”:“http://c.biancheng.net/”, “Tutorial”:“JSON”, “Article”:[ “JSON 是什么”, “JSONP 是什么”, “JSON 语法规则” ] } JSON 的语法规则十分简单可称得上“优雅完美”总结起来有 数组Array用方括号(“[]”)表示。 对象Object用大括号”{}”表示。 名称/值对name/value组合成数组和对象。 名称name置于双引号中值value有字符串、数值、布尔值、null、对象和数组。 并列的数据之间用逗号“,”分隔
//json对象 { “name”: “Geoff Lui”, “age”: 26, “isChinese”: true }
//“名称/值对”里值可以是数组和对象例如 { “name”: “Geoff Lui”, “age”: 26, “isChinese”: true, “friends”:[“Lucy”, “Lily”, “Gwen”], “Mother”: { “name”: “Mary Lui”, “age”: 54 } }
Json是一种轻量级的数据交换格式采用一种“键值”对的文本格式来存储和表示数据在系统交换数据过程中常常被使用是一种理想的数据交换语言。在使用Java做Web开发时不可避免的会遇到Json的使用。下面我们就简单讲一下Json的使用以及fastjson.jar包的使用。
Json分类
json-lib json-lib最开始的也是应用最广泛的json解析工具json-lib 不好的地方确实是依赖于很多第三方包包括commons-beanutils.jar,commons-collections.jar,commons-lang.jar,commons-logging.jar,ezmorph-1.0.6.jar,对于复杂类型的转换json-lib对于json转换成bean还有缺陷比如一个类里面会出现另一个类的list或者map集合json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。
开源的Jackson 相比json-lib框架Jackson所依赖的jar包较少简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃更新速度也比较快。Jackson对于复杂类型的json转换bean会出现问题一些集合MapList的转换出现问题。Jackson对于复杂类型的bean转换Json转换的json格式不是标准的Json格式。JacksonJackson是一个广泛使用的高性能JSON处理库由FasterXML开发和维护。它提供了一套强大的API可以进行JSON的序列化和反序列化操作。Jackson支持注解配置、数据绑定和树模型等多种处理方式。示例代码 CodeObjectMapper objectMapper new ObjectMapper(); String json objectMapper.writeValueAsString(object); // 对象序列化为JSON MyClass obj objectMapper.readValue(json, MyClass.class); // JSON反序列化为对象
Google的Gson Gson是目前功能最全的Json解析神器Gson当初是为因应Google公司内部需求而由Google自行研发而来但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数无依赖不需要例外额外的jar能够直接跑在JDK上。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法Gson完全可以将复杂类型的json到bean或bean到json的转换是JSON解析的神器。 Gson在功能上面无可挑剔但是性能上面比FastJson有所差距。
GsonGson是Google提供的一个简单易用的JSON处理库适用于Android开发和普通Java项目。它提供了简洁的API支持对象的序列化和反序列化并具有良好的性能表现。示例代码 CodeGson gson new Gson(); String json gson.toJson(object); // 对象序列化为JSON MyClass obj gson.fromJson(json, MyClass.class); // JSON反序列化为对象
阿里巴巴的FastJson Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖不需要例外额外的jar能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题可能会出现引用的类型导致Json转换出错需要制定引用。FastJson采用独创的算法将parse的速度提升到极致超过所有json库。 综上4种Json技术的比较在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用如果只是功能要求没有性能要求可以使用google的Gson如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确使用FastJson将Json转换Bean。 FastjsonFastjson是阿里巴巴开源的一个快速、功能强大的JSON处理库。它具有很高的性能和灵活的特性支持注解配置和各种数据类型的转换。示例代码 CodeString json JSON.toJSONString(object); // 对象序列化为JSON MyClass obj JSON.parseObject(json, MyClass.class); // JSON反序列化为对象
JSON.simple
JSON.simple是一个轻量级的JSON处理库提供了简单的API来处理JSON数据。它适用于简单的JSON操作和较小的项目但在性能和功能方面相对较弱。示例代码 CodeJSONObject jsonObject new JSONObject(); jsonObject.put(“key”, “value”); // 添加键值对 String json jsonObject.toJSONString(); // 对象序列化为JSON
JSONObject parsedObject (JSONObject) JSONValue.parse(json); // JSON反序列化为对象 这些JSON类库各有特点可以根据项目需求和个人偏好选择合适的类库。它们都提供了简单易用的API来进行JSON的序列化和反序列化操作并具有不同的性能和功能特性。
JSON 序列化方式有哪些
在Java中进行JSON序列化有多种方式以下是一些常见的JSON序列化方式和工具
GsonGson是Google提供的一个用于Java对象和JSON数据之间的序列化、反序列化的库。通过Gson可以方便地将Java对象转换为JSON字符串或将JSON字符串转换为Java对象。JacksonJackson是另一个流行的用于处理JSON数据的Java库它提供了多种方法来实现对象和JSON之间的转换包括基于注解的方式和简单的API。org.jsonJava标准库中也提供了JSON处理的相关类比如JSONObject和JSONArray可以用来处理简单的JSON数据。Fastjson阿里巴巴开发的Fastjson是一个性能优秀的JSON处理库提供了丰富的功能和灵活的配置选项被广泛应用于各种Java项目中。MoshiSquare开发的Moshi是另一个优秀的JSON库专注于性能和简洁性适用于Android开发以及一般的Java应用程序。Spring框架在Spring框架中可以使用RestController注解返回Java对象Spring会自动将其序列化为JSON格式的响应。也可以使用ResponseBody注解或ResponseEntity对象来实现JSON序列化。JAXBJava Architecture for XML Binding (JAXB) 是Java EE平台的一部分可以用于将Java对象和XML/JSON数据相互转换。 以上是一些常用的在Java中进行JSON序列化的方式和工具你可以根据自己的需求和喜好选择合适的工具来实现对象和JSON数据之间的转换。每种工具都有自己的特点和适用场景可以根据项目需求选择最合适的方式。
消息队列中传输的数据格式JSON 对象还是 JSON 字符串
选择消息队列中传输的数据格式可以根据您的具体需求和场景来决定使用 JSON 对象还是 JSON 字符串。 使用 JSON 对象作为消息格式的优点包括
结构化JSON 对象提供了结构化的数据表示形式可以方便地表示复杂的数据结构并且可以直接通过属性名来访问数据使数据处理更加简单。类型安全JSON 对象中的属性名和属性值可以有类型信息可以避免在处理消息时发生类型错误并提供更好的类型安全性。可读性JSON 对象相对于纯文本的 JSON 字符串来说在可读性方面更好可以更直观地理解消息的内容。扩展性JSON 对象可以轻松地添加、删除或修改属性以适应未来可能的数据结构变化。 而使用 JSON 字符串作为消息格式的优点包括简洁性相比于 JSON 对象JSON 字符串的表示形式更加简洁可以减少消息的传输大小。互操作性JSON 字符串是一种通用的数据表示形式在不同编程语言和平台之间更容易进行数据传输和解析。兼容性由于 JSON 字符串是一种标准格式在许多消息队列系统和其他应用程序中都有广泛的支持。 因此选择 JSON 对象还是 JSON 字符串主要取决于您的需求和偏好。如果需要更好的可读性、类型安全性和扩展性可以选择 JSON 对象如果追求简洁性、互操作性和兼容性可以选择 JSON 字符串。 在实际应用中通常可以根据具体场景和需求来灵活选择使用 JSON 对象或 JSON 字符串作为消息格式。
指定JSON字段与Java属性之间的映射关系的注解
fastjson的JSONField和Jackson的JsonProperty注解是用于在序列化和反序列化过程中指定JSON字段与Java属性之间的映射关系的注解。
1. fastjson.JSONField注解
JSONField注解可用于字段或方法上用于指定JSON字段与Java属性之间的映射关系。 示例代码
public class User {JSONField(name user_name)private String userName;// getter和setter方法// 示例方法上的使用JSONField(name age)public int getAge() {// ...}
}2. jackson.annotation.JsonProperty注解
JsonProperty注解可用于字段或方法上用于指定JSON字段与Java属性之间的映射关系。 示例代码
public class User {JsonProperty(user_name)private String userName;// getter和setter方法// 示例方法上的使用JsonProperty(age)public int getAge() {// ...}
}这两个注解的功能相似都是用于定义JSON字段名与Java属性名之间的映射关系。它们主要的区别在于 ● 包JSONField注解属于fastjson库而JsonProperty注解属于Jackson库。 ● 特性JSONField注解提供了更多的特性和选项如日期格式化、序列化顺序控制等而JsonProperty注解相对简单主要用于指定字段名。 根据实际使用情况和所使用的JSON库选择适合的注解来定义JSON字段与Java属性之间的映射关系。
json工具
开发工具-Hijson 离线json-Hijson JSON Viewer是Notepad的JSON插件 Notepad的Plugins Admin可以安装管理插件 它不仅可以格式化JSON字符串 还可以打开JSON查看器查看结构化的JSON。 使用在线 JSON 格式化工具例如https//jsonformatter.curiousconcept.com/ https//jsonformatter.org/ https//codebeautify.org/jsonviewer 使用代码编辑器的自带工具。 json在线 https://www.sojson.com/ https://www.json.cn/ Json Parser json串格式化工具不用打开浏览器了 JSON Parser是用于验证和格式化JSON字符串的轻量级插件