【问题标题】:JSON implementations that handle sparse arrays处理稀疏数组的 JSON 实现
【发布时间】:2011-02-08 23:23:17
【问题描述】:

我需要知道是否有任何 JSON 实现可以处理令我满意的稀疏数组。我已经看到了这个问题:How to represent a sparse array in JSON?,但使用对象而不是数组对我来说不是一个选择;我需要一个数组。

我的最低要求是实现用“未定义”填补任何空白。否则,我会在 JSON 编码之前编写自己的防御性代码来填补空白。

【问题讨论】:

    标签: javascript arrays json sparse-array


    【解决方案1】:

    不可能。忘记实现吧,这在规范中是不允许的。

    http://json.org/

    数组仅由值定义。对象用于索引/键有意义的时候。

    【讨论】:

    • ...并且“未定义”不是 JSON 值
    • 积分;因此会用 null 来填补空白
    • 嗯,问题是 JSON 是 JSON,没有办法直接表示一个“稀疏数组”,这样任何 JSON 解析器都会理解它。但是,如果您对在 JSON 的“输入”和“输出”方式上转换数组感到满意,那么@Robusto 的答案就是您想要查看的。
    【解决方案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,但在您的意义上它是一个“稀疏”数组。

    【讨论】:

    • 我不认为这是要求的,但我同意这是最好的方法。当然,人们可能想知道一个包含大量“null”值的普通 JSON 数组是否会压缩到更小的东西!
    • @Pointy:是的,对于大多数用例来说,您可能是对的。但是,一旦您决定这是限制,几乎肯定有人会向您发送 10000000 的索引。:)
    • @JoeLove:询问 OP。无论如何,他要求实现边缘案例。 (那是九年前的事了。)
    • 谢谢,我误读了 OPs 的问题。我没有意识到用那根弦来填补空隙。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2018-08-22
    • 2021-01-28
    • 1970-01-01
    • 2012-09-04
    • 2016-01-15
    相关资源
    最近更新 更多