2017-03-16 95 views
1

我想排序JSON而不重新排序数组。 JSON的样子:有没有一种方法来排序JSON对象,而不重新排序它里面的数组?

{ 
    "objectid":"589a399724bd631d0424265a", 
    "mappingerrors":[ 

    ], 
    "timestamp":"UCT", 
    "models":[ 
     { 
     "models4":"589a399724bd631d", 
     "models1":"AAAA", 
     "models3":"244", 
     "models5":"7ee92c958a051e66f19d6561575c5642", 
     "models2":"01945610", 
     "values":[ 
      { 
       "11":"YYYY", 
       "1":"A", 
       "9":"B", 
       "5":"XXXX", 
       "3":2, 
       "10":239.804, 
       "6":"C", 
       "2":"D", 
       "4":"2017-02-03T21:53Z", 
       "8":"MSFT", 
       "7":"TTTT" 
      } 
     ], 
     "models6":"2017-02-03T21:53Z" 
     } 
    ] 
} 

现在我想这个排序的下面:

{ 
    "mappingerrors":[ 

    ], 
    "models":[ 
     { 
     "models1":"AAAA", 
     "models2":"01945610", 
     "models3":"244", 
     "models4":"589a399724bd631d", 
     "models5":"7ee92c958a051e66f19d6561575c5642", 
     "models6":"2017-02-03T21:53Z", 
     "values":[ 
      { 
       "1":"A", 
       "2":"D", 
       "3":"2", 
       "4":"2017-02-03T21:53Z", 
       "5":"XXXX", 
       "6":"C", 
       "7":"TTTT", 
       "8":"MSFT", 
       "9":"B", 
       "10":"239.804", 
       "11":"YYYY" 
      } 
     ] 
     } 
    ], 
    "objectid":"589a399724bd631d0424265a", 
    "timestamp":"UCT" 
} 

我试着用下面的代码,但它没有给出相应的结果。

function sortObject(jsonObject) { 
     var sorted = {}, 
      key, a = []; 

     for (key in jsonObject) { 
      if (jsonObject.hasOwnProperty(key)) { 
       a.push(key); 
      } 
     } 

     a.sort(); 

     for (key = 0; key < a.length; key++) { 
      sorted[a[key]] = jsonObject[a[key]]; 
     } 
     return sorted; 
    } 

有没有办法通过忽略JSON对象内的数组来做到这一点?

+0

这没有意义。 JSON中的对象不是有序的结构,你为什么要对它们进行“排序”?另外*“没有给出适当的结果”*不是[mcve]。 – jonrsharpe

+0

JSON的文本表示让你错觉它们意味着对对象的键进行排序。在JavaScript对象和JSON规范中都明确指出它们是**无序的** [RFC7159](http://www.rfc-editor.org/rfc/rfc7159.txt) –

+0

相关:[有没有一种方法来排序/在JavaScript对象中的顺序键?](/ questions/9658690 /) – Stobor

回答

0

您可以使用下面的代码来排列数组。

var unordered = { 
 
    "objectid": "589a399724bd631d0424265a", 
 
    "mappingerrors": [ 
 

 
    ], 
 
    "timestamp": "UCT", 
 
    "models": [{ 
 
    "models4": "589a399724bd631d", 
 
    "models1": "AAAA", 
 
    "models3": "244", 
 
    "models5": "7ee92c958a051e66f19d6561575c5642", 
 
    "models2": "01945610", 
 
    "values": [{ 
 
     "11": "YYYY", 
 
     "1": "A", 
 
     "9": "B", 
 
     "5": "XXXX", 
 
     "3": 2, 
 
     "10": 239.804, 
 
     "6": "C", 
 
     "2": "D", 
 
     "4": "2017-02-03T21:53Z", 
 
     "8": "MSFT", 
 
     "7": "TTTT" 
 
    }], 
 
    "models6": "2017-02-03T21:53Z" 
 
    }] 
 
}; 
 

 
console.log(JSON.stringify(unordered)); 
 

 
var ordered = unordered; 
 
var modelsOrder = {}; 
 
var valuesOrder = {}; 
 
Object.keys(unordered.models[0]).sort().forEach(function(key) { 
 
    modelsOrder[key] = unordered.models[0][key]; 
 
}); 
 

 
Object.keys(unordered.models[0].values).sort().forEach(function(key) { 
 
    valuesOrder[key] = unordered.models[0].values[key]; 
 
}); 
 

 
ordered.models[0] = modelsOrder; 
 
ordered.models[0].values = valuesOrder; 
 
console.log(JSON.stringify(ordered));

您可以运行的代码片段和验证。

希望这会有所帮助!

+0

感谢anoop,它帮助,只需要修改值部分,函数_sortJson(无序){var_order = unordered; var modelsOrder = {}; var valuesOrder = {}; (Key){ modelsOrder [key] = unordered.models [0] [key]; }); (key){ valueOrder [key] = unordered.models [0] .values [0] [key] Object.keys(unordered.models [0] .values [0])。 ; }); ordered.models [0] = modelsOrder; ordered.models [0] .values [0] = valuesOrder; return JSON.stringify(ordered); } –