好日子,我想排序基於字典值的JSON數組。 在序列化之前,字典按照字母順序顯示,這是正確的,但是一旦序列化,數組將根據字典Key進行排序。 一個例子是:排序基於密鑰的JSON數組
{[692:"!Entry1"]}, {[5:"!Entry2"]}, {[75:"!Entry3"]}
被分類爲
{[5:"!Entry2"]}, {[75:"!Entry3"]}, {[692:"!Entry1"]}
任何幫助,請
好日子,我想排序基於字典值的JSON數組。 在序列化之前,字典按照字母順序顯示,這是正確的,但是一旦序列化,數組將根據字典Key進行排序。 一個例子是:排序基於密鑰的JSON數組
{[692:"!Entry1"]}, {[5:"!Entry2"]}, {[75:"!Entry3"]}
被分類爲
{[5:"!Entry2"]}, {[75:"!Entry3"]}, {[692:"!Entry1"]}
任何幫助,請
這不是有效的JSON,如果它是,它不會是一個數組,這將是一個東西。對象沒有排序。
如果它是一個數組,它將是稀疏的。 JSON沒有辦法表示稀疏數組。
在JavaScript(不需要jQuery的),你可以表達稀疏數組是這樣的:
var a = [];
a[692] = "!Entry1";
a[5] = "!Entry2";
a[75] = "!Entry3";
但是,正如你提到的,它會通過按鍵進行排序,而不是值(例如,"!Entry2"
,"!Entry3"
,"!Entry1"
)。
JSON和JavaScript都沒有辦法對條目的值排序基本類型(數組或objets)。
在JSON(或JavaScript),你可以這樣做:
[{"692":"!Entry1"}, {"5":"!Entry2"}, {"75":"!Entry3"}]
...它代表對象的數組,其中每個對象都有一個名稱的屬性一樣"75"
具有價值給你「入口」字符串。但它很難很難。
另一種方式是:
[
{key: "692", value: "!Entry1"},
{key: "5", value: "!Entry2"},
{key: "75", value: "!Entry3"}
]
哪個是對象的數組,其中每個對象具有一個key
屬性給出密鑰,以及value
屬性給出的值。
不能依賴對象內部按鍵的確切順序。
如果你想保留的順序,你的結構應該是這樣的:
[{692:"!Entry1"}, {5:"!Entry2"}, {75:"!Entry3"}]
這也是不是有效的JSON(儘管它是有效的JavaScript),並且非常難以使用(正如我在答案中指出的那樣)。 – 2013-05-06 08:36:58
@ T.J.Crowder是的,我故意使用術語「結構」而不是有效的JSON表示法:) – 2013-05-06 08:40:37
@ Jack::-) ...... – 2013-05-06 08:52:17
我知道這個問題是舊的,但我碰到它,而尋找一個類似的解決方案。我最終創建了一個函數,它根據一個鍵對一組JSON對象執行插入排序,所以我認爲我會分享給其他任何需要此功能的人。下面的代碼,它最大的工程至少或至少根據參數最大「isGreatestToLeast」(布爾):
/**
* Performs an insertion sort on an array of json object based on a specified key
* @param jsonArray - an array of json objects
* @param key - the name of the key that should be used to determine the value
* @param isGreatestToLeast - boolean, is the sort least to greatest or greatest to least?
* @returns {array} of objects
*/
function insSortJsonArr(jsonArray, key, isGreatestToLeast){
for(var i = 1; i < jsonArray.length; i++){
var next = jsonArray[i];
var j = i;
if(isGreatestToLeast){
while(j > 0 && next[key] > jsonArray[j - 1][key]){
jsonArray[j] = jsonArray[j - 1];
j--;
}
} else{
while(j > 0 && jsonArray[j - 1][key] < next[key]){
jsonArray[j] = jsonArray[j - 1];
j--;
}
}
jsonArray[j] = next;
}
return jsonArray;
}
任何人,歡迎使用。讓我知道是否有任何問題。
這不是有效的json。 – 2013-05-06 08:27:31
使用http://www.jsonlint.org檢查有效的json – 2013-05-06 08:30:06