如何在序列化JSON时,按子对象属性排序含子对象的JSON对象?
如何按子对象属性排序JSON对象的序列化结果?
要实现按子对象的date属性排序后序列化,核心思路是先将无序的JSON对象转换为可排序的结构,排序后再转回对象并序列化,具体分语言举例:
JavaScript 实现
提取对象的键值对数组
const data = { "Foo": { "name": "Foo", "date": "2022-08-21" }, "Bar": { "name": "Bar", "date": "2022-08-20" } }; // 转换为[key, value]格式的数组 const entries = Object.entries(data);按
date属性排序
由于date是ISO标准格式,可直接用日期对象比较:// 按日期升序(旧日期在前) entries.sort((a, b) => new Date(a[1].date) - new Date(b[1].date)); // 若需降序,调换a、b位置即可 // entries.sort((a, b) => new Date(b[1].date) - new Date(a[1].date));转回对象并序列化
ES2020+ 及主流浏览器/Node.js环境中,普通对象会保留插入顺序,直接转换后序列化即可:const sortedData = Object.fromEntries(entries); const sortedJson = JSON.stringify(sortedData, null, 2); console.log(sortedJson);输出结果会按
date排序,Bar在前,Foo在后。
Python 实现
提取并排序键值对
import json data = { "Foo": { "name": "Foo", "date": "2022-08-21" }, "Bar": { "name": "Bar", "date": "2022-08-20" } } # 按子对象的date属性排序 sorted_items = sorted(data.items(), key=lambda item: item[1]["date"])转回字典并序列化
Python 3.7+ 版本的普通字典会保留插入顺序,直接转换后序列化:sorted_data = dict(sorted_items) sorted_json = json.dumps(sorted_data, indent=2) print(sorted_json)
注意事项
- 早期JSON规范(RFC 7159之前)认为对象键值对无序,部分旧工具可能不保留排序后的顺序,建议使用支持有序对象的现代语言版本或工具。
- 如果不需要保留原对象的索引结构,也可以直接将子对象转为数组后排序序列化,但会失去按
name快速索引的能力。
内容的提问来源于stack exchange,提问作者Irfy
相关产品推荐
相关产品推荐

