2017-03-16 4 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" 
} 

私は次のコードを使用してみましたが、それは適切な結果を与えていないJSONは次のようになります。

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 ordered = unordered; var modelsOrder = {}; var valuesOrder = {}; オブジェクト(key){key} = unordered.models [0] [key]; }); for(key){ modelsOrder [key] = unordered.models [0] (key){ valuesOrder [key] = unordered.models [0] .values [0] [key]キーを押したままにしておくと、 ; }); ordered.models [0] = modelsOrder; ordered.models [0] .values [0] = valuesOrder; JSON.stringify(ordered)を返します。 } –

関連する問題