JavaScript解析JSON后自动排序?对象数字键顺序异常求助
问题原因与解决办法
JavaScript会对对象中可解析为整数的字符串键自动按数值升序排序,这就是你看到16跑到17前面的原因。
具体原因
PHP的关联数组严格保留插入顺序,但JSON规范里并没有定义对象属性的顺序。而JS引擎在处理对象时,若键是纯数字字符串(比如"17"、"16"),会将其视为类数组的索引,自动按数值大小重新排序,所以解析后顺序就发生了变化。
解决办法
有两种常用思路:
- 修改键的格式:给数字键添加非数字前缀,比如改成
"cond_17"、"cond_16",这样JS不会把它们当作纯数字键,就能保留原始顺序。 - 改用数组结构:把
condiment从对象改成数组,每个元素包含键和对应的数据,比如:
数组会严格保留元素的插入顺序,PHP端输出时需要把原来的关联数组转换为索引数组结构。"condiment": [ {"id": "17", "content": { ... }}, {"id": "16", "content": { ... }} ]
内容的提问来源于stack exchange,提问作者ChaCha
相关产品推荐
相关产品推荐

