You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在序列化JSON时,按子对象属性排序含子对象的JSON对象?

如何按子对象属性排序JSON对象的序列化结果?

要实现按子对象的date属性排序后序列化,核心思路是先将无序的JSON对象转换为可排序的结构,排序后再转回对象并序列化,具体分语言举例:

JavaScript 实现

  1. 提取对象的键值对数组

    const data = {
        "Foo": { "name": "Foo", "date": "2022-08-21" },
        "Bar": { "name": "Bar", "date": "2022-08-20" }
    };
    // 转换为[key, value]格式的数组
    const entries = Object.entries(data);
    
  2. 按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));
    
  3. 转回对象并序列化
    ES2020+ 及主流浏览器/Node.js环境中,普通对象会保留插入顺序,直接转换后序列化即可:

    const sortedData = Object.fromEntries(entries);
    const sortedJson = JSON.stringify(sortedData, null, 2);
    console.log(sortedJson);
    

    输出结果会按date排序,Bar在前,Foo在后。

Python 实现

  1. 提取并排序键值对

    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"])
    
  2. 转回字典并序列化
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:45:37