1.定义
JSON(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式。它是一种文本格式,独立于语言,易于阅读和编写,同时也易于机器解析和生成。JSON 最初由 Douglas Crockford 提出,作为 JavaScript 的一个子集,但现在已经成为一种独立的格式,被广泛用于互联网应用之间的数据交换。
{ "name": "John Doe", "age": 30, "city": "New York", "isStudent": false, "hobbies": ["reading", "coding", "traveling"], "address": { "street": "123 Main St", "city": "Anytown", "zip": "12345" } } |
2.与xml的关系
2.1.相同之处
JSON 是纯文本 JSON 具有"自我描述性"(人类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
2.2.不同之处
没有结束标签
更短
读写的速度更快
能够使用内建的
JavaScript eval() 方法进行解析
使用数组
不使用保留字
3.为什么使用json
1)简洁和易读
2)独立于编程语言
3)数据交换的标准
在 Web 开发中,特别是在客户端和服务器之间的通信中,JSON 已经成为了事实上的标准。
4)跨平台和网络友好
5)数据结构灵活性
6)易于集成和处理
JSON 的解析和生成工具广泛存在,使得开发者能够轻松地在项目中集成 JSON 数据的处理和操作。许多编程语言都提供了内置的 JSON 支持,或是第三方库可以快速集成。
4.json语法
4.1.json的语法规则
数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组
4.2.json的数据类型
4.2.1.数字(整数或浮点数)
整数或浮点数形式。
{ "name": "John Doe", "age": 30, "isStudent": false, "address": { "street": "123 Main St", "city": "Anytown" }, "hobbies": ["reading", "coding"] } |
4.2.2.字符串(在双引号中)
必须包含在双引号 "
内。
{ "name": "John Doe", "age": 30, "isStudent": false, "address": { "street": "123 Main St", "city": "Anytown" }, "hobbies": ["reading", "coding"] } |
4.2.3.逻辑值(true 或 false)
表示真(true)或假(false)。
{ "name": "John Doe", "age": 30, "isStudent": false, "address": { "street": "123 Main St", "city": "Anytown" }, "hobbies": ["reading", "coding"] } |
4.2.4.数组(在中括号中)
使用方括号 []
包裹,值之间使用逗号分隔,每个值可以是任意合法的 JSON 数据类型。
{ "name": "John Doe", "age": 30, "isStudent": false, "address": { "street": "123 Main St", "city": "Anytown" }, "hobbies": ["reading", "coding"] } |
4.2.5.对象(在大括号中)
使用花括号 {}
包裹,由键值对组成,键必须是字符串,值可以是任意合法的 JSON 数据类型。
{ "name": "John Doe", "age": 30, "isStudent": false, "address": { "street": "123 Main St", "city": "Anytown" }, "hobbies": ["reading", "coding"] } |
4.2.6.null
表示空值
{ "name": "John Doe", "age": 30, "isStudent": null } |
4.3.7.注释
JSON 不支持注释,不能在 JSON 数据中使用任何形式的注释。
5.json使用场景
1)Web 开发:用于前后端之间的数据交换,如 AJAX 请求和响应。
2)配置文件:一些软件和服务使用 JSON 格式作为配置文件的存储格式。
3)日志记录:某些系统将日志记录为 JSON 格式,便于后续分析和处理。
4)数据存储:NoSQL 数据库和文档存储通常支持 JSON 格式。
6.常见json问题处理
6.1.json解析错误
问题描述:
在解析 JSON 数据时,可能会遇到语法错误或格式不正确的情况,导致解析失败。
解决方法:
使用 JSON 解析器进行验证:可以使用现代编程语言中提供的 JSON 解析器来验证 JSON 数据的格式是否正确,例如 JavaScript 中的 JSON.parse() 方法,Python 中的 json.loads() 方法等。
使用在线工具验证:也可以使用在线的 JSON 验证工具(例如 JSONLint)来验证 JSON 数据的语法和格式是否正确。
6.2.跨越问题
问题描述:
当使用 AJAX 请求获取跨域的 JSON 数据时,由于浏览器的同源策略限制,可能导致请求被拒绝或无法获取数据。
解决方法:
使用 CORS(跨域资源共享):对于现代浏览器,推荐使用 CORS 来处理跨域请求。服务端需要设置适当的 CORS 头部来允许跨域请求。
使用 JSONP:如果服务端支持,可以考虑使用 JSONP 技术来获取跨域数据。
反向代理:在一些情况下,可以考虑使用反向代理将跨域请求转发到同源服务器上,然后再从同源服务器获取数据。
6.3.缺少字段或字段类型不匹配
问题描述:
从服务器或其他数据源获取的 JSON 数据中,可能会缺少某些字段或者字段的类型与预期不匹配,导致程序处理失败或产生意外结果。
解决方法:
添加默认值:在处理 JSON 数据时,可以为缺少的字段提供默认值,避免程序在缺少字段时出现异常。
数据验证和转换:在解析和使用 JSON 数据之前,进行严格的数据验证和类型转换,确保字段类型与预期一致。
错误处理:对于数据类型不匹配或缺失字段的情况,添加适当的错误处理机制,例如记录日志、返回错误信息给用户等。
6.4.JSON 数据的安全性问题
问题描述:
JSON 数据可能受到恶意修改或注入攻击,导致安全性问题。
解决方法:
验证和过滤输入:在接收 JSON 数据之前,进行严格的输入验证和过滤,确保数据的完整性和安全性。
防止 XSS 攻击:在向页面输出 JSON 数据时,避免直接将数据插入到 HTML 中,可以使用安全的编码方法,例如将 < 替换为 < 等。
使用 HTTPS:在数据传输过程中,使用 HTTPS 协议来加密数据,防止数据被窃取或篡改。
6.5.JSON 数据的性能优化
问题描述:
处理大量或复杂的 JSON 数据时,可能会遇到性能问题,如解析速度慢、内存占用高等。
解决方法:
数据压缩:对于大量重复的数据,可以使用数据压缩算法(如 Gzip)来减少数据传输大小。
使用流式处理:对于大型 JSON 数据,可以考虑使用流式处理方式,逐行读取或分块读取数据,而不是一次性加载整个数据到内存中。
缓存和优化算法:对于频繁访问的 JSON 数据,可以考虑使用缓存技术来减少服务器负载,并优化数据处理算法以提升性能。
7.JSONP
7.1.定义
JSONP(JSON with Padding)是一种用于解决跨域数据请求的技术,它通过利用 <script>
标签的跨域加载特性来获取数据,并允许在不受同源策略限制的情况下从其他域加载数据。
7.2.JSONP的基本原理
7.2.1.动态创建 <script>
标签
客户端(浏览器端)通过 JavaScript 动态创建一个 <script>
标签,并设置其 src
属性为跨域数据接口的 URL,并在 URL 中传递一个回调函数名作为参数。
var url = "http://example.com/api/data?callback=handleResponse"; var script = document.createElement("script"); script.src = url; |
7.2.2.服务器端处理
服务器接收到带有 callback
参数的请求后,将数据封装在指定名称的回调函数中返回给客户端。
// 假设请求的 URL 为 http://example.com/api/data?callback=handleResponse handleResponse({ "name": "John Doe", "age": 30 }); |
7.2.3.客户端处理数据
浏览器接收到返回的 JavaScript 文件时,会立即执行其中的 handleResponse
函数,并将服务端返回的 JSON 数据作为参数传入,然后可以在该函数中处理数据。
function handleResponse(data) { console.log(data); } |
7.3.优缺点
7.3.1.优点
能够绕过浏览器的同源策略限制,实现跨域数据请求。
兼容性好,可以在几乎所有浏览器和客户端环境中使用。
7.3.2.缺点
安全性问题,可能会受到恶意代码注入攻击。
仅支持 GET 请求,不适用于需要发送敏感数据或进行数据修改的操作。
7.4.使用场景
在不支持 CORS(跨域资源共享)的环境下,可以考虑使用 JSONP 来获取跨域数据。
用于与不同域的第三方服务进行数据交互,例如在前端页面中引入第三方数据,如广告、天气信息等。
7.5.注意事项
1)安全性问题:JSONP 存在安全风险,因为它将服务器返回的数据作为 JavaScript 执行,如果不信任提供 JSONP 服务的服务器,可能会导致 XSS(跨站脚本攻击)等安全问题。
2)仅支持GET 请求:由于 JSONP 是通过 <script>
标签加载的方式获取数据,所以它只支持 GET 请求,无法支持 POST 等其他类型的请求。
3)依赖于服务端的支持:要使用 JSONP,服务端必须支持返回指定格式的数据,并且能够处理 callback
参数。
参考:
https://www.json.cn/run/html5/?filename=tryjson_create
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » json相关知识
发表评论 取消回复