JSON 数据详解

devtools/2025/3/18 23:18:01/


一、JSON 是什么?

JSON(JavaScript Object Notation) 是一种 轻量级的数据交换格式,采用键值对(Key-Value)结构描述数据。它与编程语言无关,常用于前后端数据传输、API接口设计以及配置文件存储。

  • 设计初衷:替代 XML,简化数据交换流程。
  • 核心特点
    • 格式简洁,易读易写。
    • 兼容多语言(Java、Python、C#等)。
    • 占用网络带宽小(相比 XML),传输效率高。

二、JSON 的组成结构

JSON 数据由以下两种基础结构组成:

  1. 对象(Object)

    • {} 包裹,表示无序的键值对集合。
    • 键(Key):字符串(必须用双引号包裹)。
    • 值(Value):可以是字符串、数字、布尔值、数组、对象或 null
    • 示例:
      json">{"name": "张三","age": 25,"isStudent": false,"address": {"city": "北京","country": "中国"}
      }
      
  2. 数组(Array)

    • [] 包裹,表示有序的值集合(元素之间用逗号分隔)。
    • 示例:
      json">[{"id": 1, "product": "手机"},{"id": 2, "product": "电脑"}
      ]
      

三、JSON 语法规则
  1. 必须遵循

    • 键名必须用 双引号 包裹(单引号非法)。
    • 值可以是 stringnumberbooleanarrayobjectnull
    • 最后一个元素后不能有逗号(否则语法错误)。
  2. 典型错误示例

    json">{"name": "李四",  // ✅ 正确'age': 30,       // ❌ 错误:键必须用双引号"hobbies": ["篮球", "音乐", ],  // ❌ 错误:末尾逗号
    }
    
  3. 注释

    • JSON 标准不支持注释,但某些工具(如 JSONC)允许用 ///* */ 注释。

四、JSON 与 XML 的对比
对比项JSONXML
体积大小更小,无冗余标签较大(标签重复)
可读性高(结构类似代码对象)较低(标签嵌套复杂化)
解析速度更快(数据结构简单)较慢(需解析复杂标签树)
适用场景API 接口、移动端应用配置文件、老旧系统交互

五、JSON 的实际应用场景
  1. 前后端数据交互

    • 前端发送请求参数:
      json">{"username": "user123","password": "******"
      }
      
    • 后端响应返回结果:
      json">{"code": 200,"data": {"userId": 123, "token": "abcxyz"}
      }
      
  2. 接口测试中的常见用法

    • JMeter 的 HTTP Sampler 中,使用 JSON 作为请求体:
      json">{"method": "POST","url": "/api/login","headers": {"Content-Type": "application/json"},"body": {"user": "test","pwd": "123456"}
      }
      
    • Postman 中直接编写 JSON 请求体测试接口:
      json-raw.jpg&pos_id=img-GHCITirq-1742207047138" alt="外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传" />
  3. 配置文件

    • 项目中的数据库配置(如 config.json):
      json">{"database": {"host": "localhost","port": 3306,"user": "root","password": "root"}
      }
      

六、如何操作 JSON 数据?
  1. 编写 JSON

    • 直接在文本编辑器或 IDE(如 VSCode、IntelliJ)中编写。
    • 必备工具:JSON 在线校验工具(如 JSONLint)。
  2. 解析 JSON

    • JavaScriptJSON.parse()JSON.stringify()
    • Pythonjson.loads()(字符串转对象)和 json.dumps()(对象转字符串)。
    • Java:使用 Jackson、Gson 等库。
  3. 测试工具中的 JSON 处理

    • JMeter

      • 通过 JSON Extractor 提取响应中的字段:
        json">"response": {"data": {"userId": 123}
        }
        
        JSON Path 表达式: $.data.userId → 提取值 123
      • 使用 JSON 断言 验证响应中的值:检查 code: 200
    • Postman

      • Tests 标签页用 JavaScript 解析 JSON 响应:
        let response = pm.response.json();
        pm.test("Check user ID", () => pm.expect(response.data.userId).to.eql(123));
        

七、JSON 的注意事项
  1. 严格语法校验

    • 键必须用双引号,大小写敏感{"Name": "Tom"}{"name": "Tom"} 不同)。
    • 数字无需引号,但字符串必须加引号:"age": 25(正确) vs "age": "25"(字符串类型)。
  2. 常见错误场景

    • JSON 解析失败:因语法错误(如逗号或引号缺失)导致接口返回 500 错误。
    • 数据类型混淆:前端期望数值类型 100,但接口返回字符串 "100"

总结

  1. 什么是 JSON?
    • 轻量级、易读的键值对数据格式,用于跨平台数据交换。
  2. 核心规则
    • 对象用 {},数组用 [],键名必须双引号,严格语法校验。
  3. 测试中的应用
    • API 请求/响应体、数据断言提取、配置文件存储。

最终目标:熟练掌握 JSON 结构,在接口测试中高效构建和解析数据,确保测试准确性。


http://www.ppmy.cn/devtools/168176.html

相关文章

zico2: 1靶场渗透测试

zico2: 1 来自 <zico2: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.203 3&#xff0c;对靶机进行端口服务探测…

网络实验操作-VLAN

实验目的 了解VLAN的作用和配置。 基础实验 需求&#xff1a;所有PC在相同网段&#xff0c;但只有PC1和PC3可以互通&#xff0c;PC2和PC4可以互通 配置思路 将可以互通的PC放到相同的VLAN中即可。 配置过程 某一个switch的配置&#xff1a; # interface GigabitEthernet…

玩转python:通俗易懂掌握高级数据结构-collections模块之UserDict

引言 UserDict是Python中collections模块提供的一个强大工具&#xff0c;它是dict的封装类&#xff0c;允许用户自定义字典的行为。通过继承UserDict&#xff0c;开发者可以轻松扩展字典的功能&#xff0c;实现自定义的字典逻辑。本文将详细介绍UserDict的关键用法和特性&…

MySQL -- 复合查询

数据库的查询是数据库使用中比较重要的环节&#xff0c;前面的基础查询比较简单&#xff0c;不做介绍&#xff0c;可自行查阅。本文主要介绍复合查询&#xff0c;并结合用例进行讲解。 本文的用例依据Soctt模式的经典测试表&#xff0c;可以自行下载&#xff0c;也可以自己创建…

解释 TypeScript 中的枚举(enum),如何使用枚举定义一组常量?

枚举&#xff08;Enum&#xff09;​ 是 TypeScript 中用于定义一组具名常量的核心类型&#xff0c;通过语义化的命名提升代码可读性&#xff0c;同时利用类型检查减少低级错误。 以下从定义方式、使用建议、注意事项三方面深入解析。 一、枚举的定义方式 1. 数字枚举 特性&…

goweb中文件上传和文件下载

文件上传 文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析HTML表单(form)enctype(Encode Type)属性控制表单在提交数据到服务器时数据的编码类型 enctype“application/x-www-form-urlencoded” 默认值,表单数据会被编码为名称/值形式。oenc…

机器学习之激活函数

什么是激活函数 激活函数是神经网络的关键组件&#xff0c;作用于神经元输出。神经元汇总输入并计算净输入值&#xff0c;激活函数将其非线性变换&#xff0c;生成神经元最终输出&#xff0c;该输出作为后续神经元输入在网络中传播。 为什么需要激活函数 引入非线性 无激活…

websocket学习手册及python实现简单的聊天室

概述 WebSocket 是一种网络通信协议&#xff0c;允许在单个 TCP 连接上进行全双工通信。它最核心的优势就在于实现了持久连接&#xff0c;实现了实时的数据传输。HTTP 协议有一个很大的缺点&#xff0c;通信只能由客户端发起&#xff0c;服务器返回响应后连接就会关闭&#xf…