2010-04-16 91 views
4

我需要知道是否有任何JSON實現可以處理稀疏數組,以使我滿意。我看過這個問題:How to represent a sparse array in JSON?但是使用一個對象而不是一個數組不是我的選擇;我需要一個數組。處理稀疏數組的JSON實現

我的最低要求是實施填寫任何與「未定義」的差距。否則,我正在編寫防禦性代碼,在JSON編碼之前自己填補空白。

回答

5

不可能。忘記實現,這只是在規範中不允許的。

http://json.org/

陣列僅由值來定義。對象用於索引/鍵具有含義時。

+1

...和「未定義」不是JSON值 – Pointy 2010-04-16 19:22:35

+0

採取的點;因此會用null填充空缺 – 2010-04-16 20:03:28

+0

問題是,JSON是JSON,並且沒有辦法直接表示「稀疏數組」,因此任何JSON解析器都能理解它。但是,如果您對在JSON的「入」和「出」方式中轉換數組感到滿意,那麼@ Robusto的答案就是您想要查看的內容。 – Pointy 2010-04-16 20:08:11

2

您可以使用屬性名稱是索引並且屬性值是值的對象,然後通過中介函數運行它以創建稀疏數組?

function getSparseArray(obj) { 
    var ary = []; 
    for (prop in obj) { 
    var i = parseInt(prop,10); 
    if (!isNaN(i)) { 
     ary[i] = obj[prop]; 
    } 
    } 
    return ary; 
} 

你會送它像

{ "5":"Five", "11":"Eleven", "99":"Ninety-Nine"} 

,並取回這是人口只有三個值的數組:

ary[5] = "Five" 
ary[11] = "Eleven" 
ary[99] = "Ninety-Nine" 
ary[0] = 'undefined' 
ary[98] = 'undefined' 
etc. 

ary這裏將有100的長度,但在你的意義上它將是一個「稀疏」數組。

+0

我不認爲這是要求的,但我同意這是最好的方式。當然,有人可能會想知道一個普通的JSON數組是否擁有大量的「空值」會將其壓縮到更小的東西! – Pointy 2010-04-16 19:26:30

+0

'ary [0]'將是'undefined',而不是'null' ... – James 2010-04-16 19:30:02

+0

@ J-P:你說得對,謝謝。編輯以反映您的評論。 – Robusto 2010-04-16 19:44:53