对 JSON 进行排序或按原始顺序获取 JSON [重复]

Posted

技术标签:

【中文标题】对 JSON 进行排序或按原始顺序获取 JSON [重复]【英文标题】:Sort JSON or get JSON in original order [duplicate] 【发布时间】:2020-02-04 16:58:37 【问题描述】:

由于无法获取原始顺序的JSON文件,我想再次在JS中对其进行排序。该文件如下所示:


    "index": 5,
    "timestamp": 1570438008,
    "data": 
        "12": [
            "Title 2",
            "Description 2"
        ],
        "10": [
            "Title 1",
            "Description 1"
        ]
    

如果我现在从 JS 访问这个 JSON 文件,我得到的不是原来的订单:

$.ajax(
    url: '../json/smiirl_data.json',
    dataType: 'json',
    success: function(response) 
        console.log(response['data']);
    
);

来自JS的console.log显示:


    "10": [
        "Title 1",
        "Description 1"
    ],
    "12": [
        "Title 2",
        "Description 2"
    ]

是否可以对其进行排序(标题降序)?我需要原始订单 (12, 10)。

【问题讨论】:

不保证密钥顺序。如果需要对它们进行排序,请返回 [ id, data ] 对数组。 @Mr.Polywhirl 在符合 ES6 的环境中它 但是你不能有相反顺序的数字键。在非 ES6 兼容的环境中,您只是没有保证。所以这是一个双输的局面。与往常一样,建议是,如果您想要有序对象,请使用数组。 @VLAZ 你能给我一个我的代码示例吗? @Anuga 我试过这个,但我无法让它工作。你能给我一个我的代码的例子吗:)? 真正的问题是为什么您希望数据的顺序是某种方式? 【参考方案1】:

首先您需要将对象序列化为数组,然后使用 sort 函数对其进行排序。

var array = [],
    data = response['data'];

    for (var array in data ) 
         array.push([array, data[vehicle]]);
    

     array.sort(function(a, b) 
        return b[1] - a[1];
     );

【讨论】:

【参考方案2】:

因为对象并不总是保证保持其顺序,并且 JSON 不支持保证顺序的 Map 类,所以您应该使用数组来代替,其中有两个元素:键和值。

例如:

"data": [
  [12, ["Title 2", "Description 2"],
  [10, ["Title 1", "Description 1"]
]

你可以像这样访问它:

for(let item of myJSON.data)

  console.log('Key:', item[0]);
  console.log('Value:', item[1]);

【讨论】:

【参考方案3】:

为保证顺序,请将数据重新构造为二维数组。

您可以创建索引映射和查找功能,使数据更易于查询。

let data = 
  "index": 5,
  "timestamp": 1570438008,
  "data": [
    [ "12", [ "Title 2", "Description 2" ] ],
    [ "10", [ "Title 1", "Description 1" ] ]
  ]


let indexMap = indexLookupMap(data.data); // Build an index
console.log(lookupEntry(data.data, indexMap, '10')); // Find entry with id '10'

data.data.forEach(entry => 
  console.log(`key => $entry[0], value => $entry[1].join(', ')`);
)

function lookupEntry(data, indexMap, id) 
  return data[indexMap[id]][1];


function indexLookupMap(data) 
  return data.reduce((dict, entry, idx) => Object.assign(dict,  [entry[0]]: idx ), );
.as-console-wrapper  top: 0; max-height: 100% !important; 

【讨论】:

以上是关于对 JSON 进行排序或按原始顺序获取 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery - 按时间顺序对任何给定的 JSON 进行排序

如何在 swift 中按字母顺序对 JSON 字符串进行排序?

Go 解析 JSON 字符串的 key 先后顺序

Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序

怎样在java代码里获取一个json对象,然后对其进行排序,排好了之后,再返回给json?

怎么对一个json数据进行排序?