json相关知识

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 中,可以使用安全的编码方法,例如将 < 替换为 &lt; 等。

         使用 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

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

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

相关文章

10.3学习

1.循环依赖 循环依赖其实就是循环引用&#xff0c;也就是两个或者两个以上的 Bean 互相持有对方&#xff0c;最终形成闭环。比如A 依赖于B&#xff0c;B又依赖于A Spring中循环依赖场景有: prototype 原型 bean循环依赖 构造器的循环依赖&#xff08;构造器注入&#xff09;…

PIKACHU | PIKACHU 靶场 XSS 后台配置

关注这个靶场的其他相关笔记&#xff1a;PIKACHU —— 靶场笔记合集-CSDN博客 PIKACHU 自带了一个 XSS 平台&#xff0c;可以辅助我们完成 XSS 攻击&#xff0c;但是该后台需要配置数据库以后才能使用。本教程&#xff0c;就是教大家如何配置 PIKACHU XSS 平台的。 PIKACHU XS…

资源《Arduino 扩展板4-单游戏摇杆》说明。

资源链接&#xff1a; Arduino 扩展板4-单游戏摇杆 1.文件明细&#xff1a; 2.文件内容说明 包含&#xff1a;AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程&#xff0c;采用AD做的。 该文件打板后配合Arduino使用&#xff0c;属于Arduino的扩展板。 该文件…

深度学习的应用综述

文章目录 引言深度学习的基本概念深度学习的主要应用领域计算机视觉自然语言处理语音识别强化学习医疗保健金融分析 深度学习应用案例公式1.损失函数(Loss Function) 结论 引言 深度学习是机器学习的一个子领域&#xff0c;通过模拟人脑的神经元结构来处理复杂的数据。近年来&…

k8s实战-2

k8s实战-2 一、Deployment1.多副本2.扩缩容3.自愈&故障转移4.滚动更新5.版本回退 二、Service1.ClusterIP2.NodePort 总结 一、Deployment Deployment 是 k8s 中的一个资源对象&#xff0c;用于管理应用的副本&#xff08;Pods&#xff09;。它的主要作用是确保集群中运行…

【Linux】进程替换、命令行参数及环境变量(超详解)

目录 进程替换 替换函数的含义 命令行参数 环境变量 PATH 进程替换 我们先看代码&#xff1a; 1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5 printf("process...begin!\n");6 7 execl("/usr/bin/ls","ls"…

论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

摘要 近年来&#xff0c;NLP从业者集中于以下实践:(i)导入现成的预训练(掩码)语言模型;(ii)在CLS令牌的隐藏表示(随机初始化权重)上附加多层感知器;(iii)在下游任务(MLP-FT)上微调整个模型。这一过程在标准的NLP基准上产生了巨大的收益&#xff0c;但这些模型仍然很脆弱&#x…

尝试从 http://pypi.doubanio.com/simple 这个索引源安装 webdriver 时出现了问题

问题如下&#xff1a; WARNING: The repository located at pypi.doubanio.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow …

从介质失效看互联网时代的信息过载

来读一篇文章&#xff1a;90年代的硬盘已大规模变砖&#xff0c;没啥好担心的&#xff0c;好事。 结合我两年前的粗浅认知 互联网时代无信息&#xff0c;按照 “动” 的观念看&#xff0c;当信息越来越多&#xff0c;信息密度越来越大时&#xff0c;信息的寿命就会越来越短&am…

离线安装docker

背景描述 项目需要在研发环境虚拟机上安装docker部署应用。 所在的服务器是一个内网&#xff0c;无法访问到外网环境。 服务器OS版本是 麒麟V10 linux 安装docker 安装包下载 获取所需版本的docker binary包&#xff0c;官方链接https://download.docker.com/linux/stati…

CoRL 2024 麻省理工学院提出T3触觉Transformer,打破触觉感知的壁垒,重塑未来机器人

在智能机器人领域&#xff0c;触觉感知的研究正逐渐成为关注的焦点。然而&#xff0c;如何让机器人通过触觉更智能地感知和操作&#xff0c;依然是一个未解决的挑战。基于相机的触觉感知是一种通过在软弹性体下嵌入相机来捕获与环境的细粒度交互的感知方法&#xff0c;是最流行…

[Python学习日记-39] 闭包是个什么东西?

[Python学习日记-39] 闭包是个什么东西&#xff1f; 简介 闭包现象 闭包意义与作用 简介 在前面讲函数和作用域的时候应该提到过&#xff0c;当函数运行结束后会由 Python 解释器自带的垃圾回收机制回收函数内作用域已经废弃掉的变量&#xff0c;但是在 Python 当中还有一种…

MySQL--数据库约束(详解)

目录 一、前言二、概念三、数据库约束3.1 约束类型3.1.1 NOT NULL 约束3.1.2 UNIQUE (唯一&#xff09;3.1.3 DEFAULT&#xff08;默认&#xff09;3.1.4 PRIMARY KEY&#xff08;主键&#xff09;3.1.5 FOREIGN KEY&#xff08;外键&#xff09;3.1.6 CHECK 四、总结 一、前言…

Golang | Leetcode Golang题解之第454题四数相加II

题目&#xff1a; 题解&#xff1a; func fourSumCount(a, b, c, d []int) (ans int) {countAB : map[int]int{}for _, v : range a {for _, w : range b {countAB[vw]}}for _, v : range c {for _, w : range d {ans countAB[-v-w]}}return }

STM32新建工程-基于库函数

目录 一、创建一个新工程 二、为工程添加文件和路径 三、创建一个main.c文件&#xff0c;并调试 四、修改一些配置 五、用库函数进行写程序 1、首先加入一些库函数和头文件 2、编写库函数程序 一、创建一个新工程 我这里选择STM32F103C8的型号&#xff0c;然后点击OK。 …

如何提取b站的视频字幕,下载视频

打开视频地址 按F12打开—开发者工具 在开发者工具打开Network 过滤器关键字&#xff1a; 自动生成字幕&#xff1a;ai_subtitle 自制&#xff1a;json 打开/关闭字幕 刷新页面 找到字幕 点选字幕的respond 将方框中的内容复制&#xff1b; 复制到&#xff1a;https://www.drea…

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC

蓝桥杯【物联网】零基础到国奖之路:十五. 扩展模块之双路ADC 第一节 硬件解读第二节 CubeMX配置第三节 代码编写 第一节 硬件解读 STM32的ADC是12位&#xff0c;通过硬件过采样扩展到16位&#xff0c;模数转换器嵌入到STM32L071xx器件中。有16个外部通道和2个内部通道&#xf…

github双重验证(2FA)启用方法

一、双重验证-2FA 在去年看到过说github启用双重验证的通知&#xff0c;觉得做为一个普通开发者&#xff0c;可能没有这么快会要求启用。结果&#xff0c;今天早晨一来就收到了邮件&#xff0c;要求说在11月底完成2FA的认证&#xff0c;否则权限受限。真是无了语。所谓2FA好理…

CSS 实现楼梯与小球动画

CSS 实现楼梯与小球动画 效果展示 CSS 知识点 CSS动画使用transform属性使用 页面整体布局 <div class"window"><div class"stair"><span style"--i: 1"></span><span style"--i: 2"></span>…

jmeter学习(2)变量

1&#xff09;用户定义的变量 路径&#xff1a;添加-》配置元件-》用户定义的变量 用户定义的变量是全局变量&#xff0c;可以跨线程组被调用&#xff0c;但在启动运行时获取一次值&#xff0c;在运行过程中不再动态获取值。 注意的是&#xff0c;如果在某个线程组定义了全…