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

JSON 对象在浏览器中顺序与后端接口返回不一致的问题

一、问题描述

后端接口返回一个字典表的JSON对象,页面展示排序与预期排序不一致。

在浏览器调试面板Response中看到接口原始响应字符串,是期望顺序:

在Preview中看到, key “22” 被提到最前,顺序发生变化:

页面展示排序与Preview中看到的一致,与后端返回的不一致。

二、原因

问题发生在浏览器将接口返回的JSON对象格式字符串解析为JSON对象的过程中, JavaScript 引擎解析JSON对象时,遵循 ECMAScript 标准定义(ES6+ 开始统一行为)的 对象属性枚举顺序 的内部规范,JavaScript 对象属性的 对象属性枚举顺序 规则如下:

1. 整数索引属性
键为非负整数的字符串(例如 “0”, “1”, “22”)会被优先枚举,按数值升序排列。

2. 普通字符串键(非整数)
如 “Ent01”, “abc”, “@type” 等,按插入顺序枚举,排在所有整数属性之后。

3. Symbol 类型键(不常见)
不参与常规的 for…in 和 Object.keys() 遍历。

因此,JSON对象字符串被JavaScript解析为JSON对象后,对象属性名为纯数字的排序在前,非数字字符排序在后,JSON对象的属性的顺序可能发生变化。

三、总结

这是一个由 JavaScript 对象内部规范引起的浏览器行为问题。

后端返回的是JSON对象格式,根据JSON的官方标准,JSON 对象的定义是一组无序的键值对,所以对顺序有要求的场景不应该使用对象结构,应该使用JSON中的数组。

JSON对象 和 JSON数组 的区别

特性JSON对象JSON数组
语法用 {} 包裹,键值对形式用 [] 包裹,值的有序集合
必须是字符串(双引号包裹)无键,直接是值
值的顺序无序有序
用途表示具有属性的数据(如对象、配置)表示列表型数据(如数组、集合)
示例{“张三”: { “age”: 25 },
“李四”: { “age”: 30 }}
[ { “name”: “张三”, “age”: 25 },
{ “name”: “李四”, “age”: 30 }]

如果无法通过修改代码结构解决,只能在设计需要排序的字段时,避免使用纯数字字符串作为键名。

http://www.lryc.cn/news/607485.html

相关文章:

  • 好未来披露2026财年Q1财报:净利润3128万美元,同比大增174%
  • Day 28:类的定义和方法
  • Git 命令使用指南:从入门到进阶
  • MySQL CPU占用过高排查指南
  • 数据处理四件套:NumPy/Pandas/Matplotlib/Seaborn速通指南
  • Agents-SDK智能体开发[3]之多Agent执行流程
  • SN74LVC1G08DBVR 德州仪器(TI)逻辑芯片IC 电源芯片 ESD保护
  • 智慧社区构建——2
  • C语言(02)——标准库函数大全(持续更新)
  • AI Agent 视角:可执行程序的二进制格式,是一场「结构化语言」与「智能解析」的双向奔赴
  • 一套视频快速入门并精通PostgreSQL
  • 03 Broker主从架构和集群模式
  • (二)LoRA微调BERT:为何在单分类任务中表现优异,而在多分类任务中效果不佳?
  • Hutool 的完整 JSON 工具类示例
  • 使用社区 EE 镜像运行 Ansible
  • Redis的ZipList、SkipList和ListPack之间的区别
  • 在Alpine Linux上配置Redis使用NFS存储的完整指南
  • 李宏毅深度学习教程 第4-5章 CNN卷积神经网络+RNN循环神经网络
  • 每天一点跑步运动小知识
  • 逻辑回归算法 银行贷款资格判断案例,介绍混淆矩阵与正则化惩罚
  • AG-UI 协议全面解析--下一代 AI Agent 交互框架医疗应用分析(下)
  • Python 项目路径配置完全指南
  • 51单片机入门:模块化编程
  • C#常见的转义字符
  • 智能Agent场景实战指南 Day 29:Agent市场趋势与前沿技术
  • 31. 伪类和伪元素区别
  • 板卡型授时设备的优势总结.北斗pcie对时装置,北斗双模pcie授时板卡,双模pcie授时板卡
  • 二建机电工程专业都考哪些知识点?
  • WordPress 前端显示英文,后台显示中文的设置
  • 前端SWR策略:优化数据请求