一、问题描述

后端接口返回一个字典表的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.pswp.cn/news/917215.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917215.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917215.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring MVC数据传递全攻略

Spring MVC数据传递一、前端到后端的数据传递1. 使用 RequestParam 传递简单参数2. 使用 PathVariable传递路径参数3. 使用RequestBody传递 JSON 数据二、后端到前端的数据传递1. 使用Model或 ModelAndView传递数据到前端2. 使用HttpServletResponse直接写回数据3.使用Response…

仓库管理系统-12-前端之头部区域Header基于嵌套路由访问个人中心

文章目录 1 个人中心 1.1 DateUtils.vue(子组件) 1.2 Home.vue(父组件) 1.3 router/index.js(嵌套路由) 1.4 index.vue(路由占位符) 2 Header.vue 2.1 页面布局 2.2 toUser方法 2.3 初始加载 2.4 Header.vue 头部区域Header中有一个个人中心下拉菜单,点击个人中心选项,通过嵌…

【智能协同云图库】第七期:基于AI调用阿里云百炼大模型,实现AI图片编辑功能

摘要:AI 高速发展赋能传统业务,图库网站亦有诸多 AI 应用空间。以 AI 扩图功؜能为例,让我们来学习如何在项目⁠中快速接入 AI 绘图大模型。‏用户可以选择一张已上传的图片,‌通过 AI 扩图得到新的图片,希望可以帮到大…

Notepad++插件安装

方式一:自动安装(有些notepad并不好用,推荐方式二)工具栏-》插件-》插件管理如下点击安装后会提示,后端安装,安装成功后自动启动,本人使用的v8.6.4的版本,插件基本都无法自动安装&am…

git pull和git fetch的区别

git pull和git fetch是git版本控制系统中的两个基本命令,它们都用于从远程仓库更新本地仓库的信息,但执行的具体操作不同。git fetch:git fetch下载远程仓库最新的内容到你的本地仓库,但它并不自动合并或修改你当前的工作。它取回了远程仓库的…

Item35:考虑virtual函数以外的其他选择

在C++中,虚函数是实现多态的传统方式,但并非唯一选择。过度依赖虚函数可能导致派生类与基类的强耦合,或难以在运行时灵活切换行为。《Effective C++》Item35指出:应根据场景选择更合适的替代方案,包括NVI模式、函数指针、策略模式等。本文解析这些方案的原理、适用场景及实…

Vue3 状态管理新选择:Pinia 从入门到实战

一、什么是pinia? 在 Vue3 生态中,状态管理一直是开发者关注的核心话题。随着 Vuex 的逐步淡出,Pinia 作为官方推荐的状态管理库,凭借其简洁的 API、强大的功能和对 Vue3 特性的完美适配,成为了新时代的不二之选。今天我们就来深…

Unity相机控制

相机的控制无非移动和旋转,每种操作各3个轴6个方向,一共12种方式。在某些需要快速验证的项目或Demo里常常需要丝滑的控制相机调试效果。相机控制虽然不是什么高深的技术,但是要写的好用还是很磨人的。 锁定Z轴的旋转 一个自由的相机可以绕 …

vue2 使用liveplayer加载视频

vue2 使用liveplayer加载视频 官网: https://www.liveqing.com/docs/manuals/LivePlayer.html支持WebRTC/MP4播放;支持m3u8/HLS播放;支持HTTP-FLV/WS-FLV/RTMP播放;支持直播和点播播放;支持播放器快照截图;支持点播多清晰度播放;支持全屏或比例显示;自动检测IE浏览器兼容播放;支…

JavaScript语法树简介:AST/CST/词法/语法分析/ESTree/生成工具

AST简介 在平时的开发中,经常会遇到对JavaScript代码进行检查或改动的工具,例如ESLint会检查代码中的语法错误;Prettier会修改代码的格式;打包工具会将不同文件中的代码打包在一起等等。这些工具都对JavaScript代码本身进行了解析…

Java函数式编程之【基本数据类型流】

一、基本数据类型与基本数据的包装类 在Java编程语言中,int、long和double等基本数据类型都各有它们的包装类型Integer、Long和Double。 基本数据类型是Java程序语言内置的数据类型,可直接使用。 而包装类型则归属于普通的Java类,是对基本数据…

.NET Core部署服务器

1、以.NET Core5.0为例,在官网下载 下载 .NET 5.0 (Linux、macOS 和 Windows) | .NET 根据自己需求选择x64还是x86,记住关键下载完成还需要下载 Hosting Bundel ,否则不成功 2、部署https将ssl证书放在服务器上,双击导入&#…

YOLO---04YOLOv3

YOLOV3 论文地址::【https://arxiv.org/pdf/1804.02767】 YOLOV3 论文中文翻译地址::【YOLO3论文中文版_yolo v3论文 中文版-CSDN博客】 YOLOv3 在实时性和精确性在当时都是做的比较好的,并在工业界得到了广泛应用 …

Qt知识点3『自定义属性的样式表失败问题』

问题1:自定义类中的自定义属性,如何通过样式表来赋值除了QT自带的属性,我们自定义的类中如果有自定义的静态属性,也可以支持样式表,如下 : Q_PROPERTY(QColor myBorderColor READ getMyBorderColor WRITE s…

RDQS_c和RDQS_t的作用及区别

🔁 LPDDR5 中的 RDQS_t 和 RDQS_c — 复用机制详解 📌 基本角色 引脚名 读操作(READ)作用 写操作(WRITE)作用(当启用Link ECC) RDQS_t Read DQS True:与 RDQS_c…

测试分类:详解各类测试方式与方法

前言:为什么要将测试进行分类呢?软件测试是软件生命周期中的⼀个重要环节,具有较高的复杂性,对于软件测试,可以从不同的角度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试工作进行更好的执…

新手docker安装踩坑记录

最近在学习docker,安装和使用折腾了好久,在这里记录一下。下载# 依赖安装 sudo apt update sudo apt install -y \ca-certificates \curl \gnupg \lsb-release# 使用清华镜像源(Ubuntu 24.04 noble) echo \"deb [arch$(dpkg …

TOGAF指南1

1.TOGAF标准简介 TOGAF(The Open Group Architecture Framework)就像是一个企业架构的“操作手册”。它帮助企业设计、搭建和维护自己的“系统地图”,确保不同部门、技术、业务目标能像齿轮一样协调运转。 它的核心是: 用迭代的方…

[Linux入门] Linux 防火墙技术入门:从 iptables 到 nftables

目录 一、防火墙基础:netfilter 与 iptables 的关系 1️⃣什么是 netfilter? 2️⃣什么是 iptables? 二、iptables 核心:五链四表与规则体系 1️⃣什么是 “链”(Chain)? 2️⃣ 什么是 “…

函数fdopendir的用法

以下是关于 fdopendir 函数的详细解析,结合其核心功能、参数说明及典型应用场景:🔍 ‌一、函数功能与原型‌‌核心作用‌将已打开的目录文件描述符(fd)转换为目录流指针(DIR*),用于后…