2010-04-16 85 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