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

JSON技术解析

什么是 JSON

JSON 全称:JavaScript Object Notation,是一种跨平台通用轻量级文本数据格式,用来存储、传输数据。

特点:所有编程语言都能看懂,PHP/Java/Python/ 前端 JS 全都通用,是现在前后端传数据的统一标准格式

  • 键名必须用双引号包裹,不能单引号
  • 数据之间用逗号分隔,最后一项末尾不能加逗号
  • 支持 6 种数据类型:字符串、数字、布尔、null、对象、数组
  • 标准 JSON 不能写注释

JSON 用来干什么

  1. 前后端接口传数据(最主要用途)登录、查询、提交数据,统一用 JSON 收发

  2. 配置文件网站配置、小程序配置都常用.json文件

  3. 本地存储数据浏览器本地缓存、小程序缓存

和普通文本、表单数据区别

  • 普通文字:杂乱无章,程序不好读取
  • 表单键值对:只能简单传单个字段
  • JSON:结构清晰,能一次性传递复杂多层数据,程序自动解析

与XML区别

JSON = 轻量、简洁、快 → 现代前后端交互首选
XML = 繁琐、笨重、扩展性强 → 老系统 / 企业专用

特性JSONXML
全称JavaScript 对象表示法可扩展标记语言
语法键值对{"key":"val"},极简自定义标签<key>val</key>,繁琐
体积无冗余字符,体积小、传输快标签重复,体积大、传输慢
解析难度原生支持,JS/PHP 一行代码解析需要专门解析器,代码复杂
数据类型支持数字 / 布尔 / 数组 / 对象所有数据都是字符串,需手动转换
注释标准格式不支持注释支持<!-- 注释 -->
主要用途前后端接口、API、小程序、APP老系统、配置文件、企业级服务
学习成本极低,5 分钟学会较高,规则复杂

代码对照,明显JSON更加轻便和简洁:

JSON------------------ { "user": { "id": 1, "name": "张三", "age": 20 } } XML------------------- <user> <id>1</id> <name>张三</name> <age>20</age> </user>

JSON转码封装和解封装还原读取

<?php class index { public string $Username; private string $Email; private int $Age; private string $Password; public function __construct(string $Username,string $Email,int $Age,string $Password) { $this->Username = $Username; $this->Email = $Email; $this->Age = $Age; $this->Password = $Password; } public function __set(string $name, $value) { $this->$name = $value; } public function __get(string $name) { if (property_exists($this,$name)) { return $this->$name; } return null; } public function getter() { return $this->age; } public function setter(string $Password) { $this->Password = $Password; } public function getPassword() { return md5($this->Password); } } $UserIndex = new index("李四","xxx@163.com","18","999"); echo "姓名:" . $UserIndex->Username . "\n" . "<br>". "邮箱:" . $UserIndex->Email . "\n" . "<br>". "年龄:" . $UserIndex->Age . "\n". "<br>". "密码:". $UserIndex->getPassword()."\n"."<br>"; //json封装: $manMessage=array('name'=>$UserIndex->Username,'email'=>$UserIndex->Email,'age'=>$UserIndex->Age); $manMessage_json=json_encode(($manMessage),JSON_UNESCAPED_UNICODE); echo '<br>'.'json封装后:'.$manMessage_json."\n"."<br>"; //json解封装数据还原: echo '<br>'.'解封装后:'; var_dump(json_decode($manMessage_json,true)); //打印指定值 $data =json_decode($manMessage_json,true); echo '邮箱是:'.$data['email'];

这是用户提交信息

JSON实战应用演示

前端封装并提交:

前端js封装json并向后端发送json文件:

/** * 用户登录 JSON 封装并提交到 login.php * 运行:node login.js */ const loginData = { username: 'admin', password: '123456', }; // 封装为 JSON 字符串 const jsonBody = JSON.stringify(loginData); fetch('http://localhost/json模拟/后端json解封装.php', { method: 'POST', header: { 'Content-Type': 'application/json', }, body: jsonBody, }) //返回文本 // .then((res) => res.text()) // .then((text) => { // console.log('PHP 返回:'); // console.log(text); // }) //返回状态码 .then((adc) => adc.json()) .then((result) => { console.log('状态码 code:', result.code); console.log('完整返回:', result); }) .catch((err) => { console.error('请求失败:', err.message); });

后端json解封装:

<?php /** * 接收前端 JS 封装的登录 JSON,解封装后输出 */ header('Content-Type: application/json; charset=utf-8'); // 读取 JS 发来的原始 JSON $rawJson = file_get_contents('php://input'); // 解封装:JSON 字符串 → PHP 数组 $loginData = json_decode($rawJson, true); if (json_last_error() !== JSON_ERROR_NONE) { echo json_encode([ 'success' => false, 'message' => 'JSON 解析失败', ], JSON_UNESCAPED_UNICODE); exit; } // 输出解封装后的数据 echo json_encode([ 'code' => 200, 'success' => true, 'message' => '接收并解封装成功', 'received' => [ 'username' => $loginData['username'] ?? '', 'password' => $loginData['password'] ?? '', ], ], JSON_UNESCAPED_UNICODE);

返回结果:

可以看的出来,前端js收到了后端的状态码和数据,并按照前端的方式打印结果。

http://www.jsqmd.com/news/882221/

相关文章:

  • Web渗透与移动逆向:两种安全范式的本质差异
  • DeepMech:基于图神经网络与模板学习的化学反应机理预测框架
  • 英雄联盟客户端美化革命:用LeaguePrank打造个性化游戏体验
  • 2026年目前耐用的会议室全彩屏厂商怎么选择 - 品牌排行榜
  • 如何通过模块化架构设计实现碧蓝航线全自动脚本:AzurLaneAutoScript技术深度解析
  • Terraform 实战:用 for 表达式将列表元素转换为大写
  • Unity商业游戏逆向解剖:天命6源码的真实结构与设计逻辑
  • 鸿蒙数学 108 篇 第十五篇:阴阳对称运算规则
  • GitHub 汉化插件:解决英文界面困扰,3步实现全中文操作体验
  • 医学影像AI迁移学习:如何科学选择预训练数据集?
  • topcode【随机算法题】【2026.5.24打卡-java版本】
  • 神经网络与深度学习课程总结二
  • 基于CNN的食双星参数快速预测:ebop_maven模型原理与应用
  • 基于伊辛机与机器学习的无线网络TDMA调度优化实践
  • Java 入门实验:手把手实现 Tank 坦克类(面向对象基础实战)
  • 中医馆升级|结合瑞式养老模式的医养结合完整落地方案
  • ArchPilot:基于多智能体与代理评估的高效神经网络架构搜索框架
  • 因果增强XGBoost框架:破解北极降水预测难题
  • RL-ARM CAN迁移至CMSIS-RTOS的实践指南
  • 机器学习记忆化:平衡隐私、鲁棒性与公平性的核心技术挑战
  • 3步解锁游戏语言障碍:XUnity自动翻译工具完全指南
  • 苏州石膏板难题终结者:苏州聚亿鑫装饰的全方位解决方案,全屋定制/石膏板/欧松板/家装设计/生态板,石膏板公司哪个好 - 品牌推荐师
  • 华硕笔记本终极优化指南:如何用G-Helper轻量级工具全面提升使用体验
  • 差分隐私公平性:基于群体自适应裁剪的DP-SGD改进算法
  • Python 3 模块详解
  • Burp Suite Professional实战卡点解析:HTTPS抓包、代理拦截与Intruder失效根因
  • 《道德经》第二十章
  • sudo高危漏洞CVE-2023-27350原理与1.9.5p2修复实战
  • 机器学习发现物理守恒量:从数据中挖掘对称性与不变性
  • 基于Transformer的行星大气辐射传输仿真器:百倍加速与1%精度