JSON技术解析

什么是 JSON

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

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

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

JSON 用来干什么

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

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

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

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

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

与XML区别

JSON = 轻量、简洁、快 → 现代前后端交互首选

XML = 繁琐、笨重、扩展性强 → 老系统 / 企业专用

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

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

php 复制代码
JSON------------------
{
  "user": {
    "id": 1,
    "name": "张三",
    "age": 20
  }
}


XML-------------------
<user>
  <id>1</id>
  <name>张三</name>
  <age>20</age>
</user>

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

php 复制代码
<?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文件:

php 复制代码
/**
 * 用户登录 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 复制代码
<?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收到了后端的状态码和数据,并按照前端的方式打印结果。

相关推荐
NiceCloud喜云18 小时前
Claude Files API 深入:从上传、复用到配额管理的工程化指南
android·java·数据库·人工智能·python·json·飞书
徒手猫1 天前
myslq 中json 格式的数据如何获取某个属性
android·json
颂love2 天前
JWT 认证系统全流程细粒度拆解
json
m0_738120722 天前
渗透测试基础知识——从零认识JWT(JSON Web Token)身份令牌
服务器·前端·安全·web安全·网络安全·json
_xaboy2 天前
开源Vue组件FormCreate通过 JSON 生成AntdvNext表单
vue.js·开源·json
Wang15303 天前
js核心概念
json
逍遥德3 天前
Java编程高频的“踩坑点”-01:fastjson.JSON 转换时泛型擦除问题
java·spring boot·spring·系统架构·json
Roselind_Yi3 天前
【快速熟悉容器】企业 Docker 从 0 到落地全流程(分角色版)
java·运维·redis·docker·容器·json·改行学it
sa100274 天前
京东评论 API 实战:JSON 数据结构、字段含义与解析技巧
前端·数据结构·json