当前位置: 首页 > news >正文

【JSON与JSONP】JSON与JSONP全面解析:定义、区别与核心技术对比

一、JSON与JSONP的基本定义

  1. JSON(JavaScript Object Notation)

    • 本质:一种轻量级的文本数据交换格式,基于键值对结构描述数据(如{"name":"John"}),支持字符串、数字、布尔值、数组、对象和null等数据类型。
    • 语法规则
      • 键名必须用双引号包裹,值可以是任意合法数据类型。
      • 对象用花括号{}表示,数组用方括号[]表示,数据项间用逗号分隔。
  2. JSONP(JSON with Padding)

    • 本质:一种利用<script>标签实现跨域请求的非官方协议,通过动态脚本执行获取数据。
    • 核心原理:服务器返回以函数调用包裹的JSON数据(如callback({"data":123})),客户端通过预定义的回调函数处理数据。

二、JSON与JSONP的核心区别

对比维度JSONJSONP
数据格式纯数据格式,遵循严格的语法规则以函数调用包裹的JSON数据(如callback({...})
用途与目的通用数据交换,适用于前后端通信专为解决跨域请求而设计
跨域支持受同源策略限制,需配合CORS实现跨域天然支持跨域,无需CORS配置
安全性安全性高,支持内容安全策略(CSP)存在XSS风险,依赖服务端信任

三、JSONP的工作原理与实现细节

  1. 动态创建<script>标签

    • 客户端通过JavaScript动态创建<script>标签,并将请求URL指向目标服务端(如src="http://api.com/data?callback=handleData")。
  2. 回调函数处理数据

    • 服务端返回数据格式为回调函数名(JSON数据)(如handleData({"status":200})),客户端需提前定义同名函数以接收数据。
  3. 自定义回调函数名

    • 通过URL参数指定回调函数名(如?callback=myFunc),服务端根据该参数动态生成返回内容。

四、其他相关技术对比

1. Ajax与JSONP的区别
维度AjaxJSONP
通信方式基于XMLHttpRequest对象基于<script>标签动态加载
跨域支持需服务端设置CORS响应头天然支持跨域
数据格式支持多种格式(JSON、XML等)仅支持JSONP格式
2. JSON与JSONB的区别
  • JSON:存储为纯文本,保留格式(如空格、键顺序),查询效率较低。
  • JSONB(如PostgreSQL中的二进制JSON):以二进制格式存储,支持索引和高效查询,但写入时需转换格式[注:搜索结果未直接提及,需结合数据库知识补充]。
3. NATP与JSON报文的区别
  • NATP:可能指网络地址转换协议(Network Address Translation Protocol),用于IP地址映射,与数据传输无关。
  • JSON报文:指基于JSON格式封装的应用层数据,用于业务逻辑交互[注:搜索结果未提及NATP,需结合网络协议知识推断]。

五、总结

JSON作为通用的数据交换格式,在前后端交互中占据核心地位;而JSONP作为一种“曲线救国”的跨域方案,虽逐渐被CORS替代,但在旧系统兼容场景中仍有价值。开发者需根据安全性、跨域需求和技术栈选择合适的方案。

相关文章:

  • 《OpenCV》——卷积神经网络人脸检测
  • 网络编程相关概念
  • (十二)基于 Vue 3 和 Mapbox GL 实现的坐标拾取器组件示例
  • spark写数据库用连接池找不到driver类
  • 安装 cnpm 出现 Unsupported URL Type “npm:“: npm:string-width@^4.2.0
  • iterm2更新后主题报错
  • SpringBoot篇(自动装配原理)
  • 大模型学习笔记------LLM模型开发流程
  • Python----数据分析(Matplotlib二:绘图一:折线图,条形图,直方图)
  • Python 爬取唐诗宋词三百首
  • C# Unity 唐老狮 No.4 模拟面试题
  • JDBC核心技术解析:从基础连接到ORM演进之路(上)
  • JavaWeb2025.02.28
  • 2.编程语音和工具介绍
  • unity学习62,尝试做第一个小游戏项目:flappy bird
  • 【http://noi.openjudge.cn/】4.3算法之图论——1538:Gopher II
  • 【开源-开源C++框架boost和poco的对比】
  • USRP4120-通用软件无线电平台
  • MATLAB CVX 能处理的目标函数数量级极限是多少?
  • VSCode 移除EmmyLua插件的红色波浪线提示
  • 土耳其、美国、乌克兰三边会议开始
  • 普京召开俄乌谈判筹备会议,拉夫罗夫、绍伊古等出席
  • 当代科技拟召开债券持有人会议 ,对“H20科技2”进行四展
  • 日月谭天丨这轮中美关税会谈让台湾社会看清了什么?
  • 泽连斯基:将带领乌代表团前往土耳其,已准备好与普京会谈
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查