【问题标题】:Should I use a JSON Array or an Object?我应该使用 JSON 数组还是对象?
【发布时间】:2014-10-08 09:43:14
【问题描述】:

我有以下代码:

$.each( orderedqty, function( priority, quantity ) {

    // for each priority

    if ( $(".switch[data-priorityid=" + priority + "]").attr("data-state") == "on" ) {

        // this priority is checked

        orderedqtyArray[ priority ] = 15;

    } else {

        orderedqtyArray[ priority ] = 10;

    }

});

console.info( orderedqtyArray );
console.info( JSON.stringify( orderedqtyArray ) );

问题是这段代码返回:

[77:15, 78:15]
[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null ,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null ,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null ,null,null,15,15]

[78:15]
[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null ,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null ,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null ,null,null,null,15]

而不是漂亮的 json :(

【问题讨论】:

  • 所以您正在创建一个sparce 数组,当您将其转换为JSON 时,您会得到……一个sparce 数组。有什么问题?
  • orderedqty 看起来像?可以分享一下吗
  • 这是一个漂亮的json,一切正常:)
  • 如果您指的是 stringify 输出缺少键“77:”和“78:”这将是因为它们是整数并且将被视为数组索引。
  • 如果您不希望字符串结果中出现 null,您可以将 null 替换为空字符串。 JSON.stringify(orderedqtyArray).replace(/null/g, "")

标签: javascript arrays json null


【解决方案1】:

浏览器的 console.log 输出经过优化以删除空值,但它是同一个数组。 JSON 无法做到这一点,它总是包含数组中的所有空值。

如果您希望字符串化的输出看起来更像 console.log 的,那么您需要将其定义为对象而不是数组。

var a = [], b = {};
a[5] = 1;
b[5] = 1;
console.log(JSON.stringify(a));
console.log(JSON.stringify(b));

输出将是

[null, null, null, null, null, 1]
{"5": 1}

【讨论】:

    【解决方案2】:

    有些奇怪。但是您应该注意 Js 中数组的有趣行为。

    如果你这样定义:

    var array = [];
    //defining item at arbitrary position
    array[5] = 5;
    
    
    // output from array will look something like this
     [undefined, undefined, undefined, undefined, 5]
    

    因此,也许您的 orderedqtyArray[ priority ] 在某个随机索引处设置了值,这会导致问题。 因为如果你有普通的数组,它肯定会变成有效的 json。

    【讨论】:

    • +1,请参阅我上面的评论 - 你在 orderedqtyArray 中使用整数作为键,因此让 JavaScript 认为你想要一个数组(或者你可能想要)。
    • 确定它肯定是一个对象。
    【解决方案3】:

    如果你只想删除空值,你可以这样做:

    JSON.stringify( orderedqtyArray.filter(function(e){return e}));
    

    【讨论】:

    • 但这没有意义,我们应该避免获取这些空值。
    猜你喜欢
    • 2016-04-10
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多