字符串 json 具有空值

String json has null values

我正在尝试 stringify 我的 json -

for (var i = 0 ; i < lines.length ; i++) {

    var label = lines[i];
    var value = 1;

    item = [];
    item["label"] = label;
    item["value"] = value;

    jsonObj.push(item);
}

var jsonString = JSON.stringify(jsonObj);

在迭代期间,labelvalue 都被相应地分配了正确的值。

然而jsonString全是空值,为什么会这样?

应该是item = {};而不是item = [];

第一个是对象字面量,第二个是数组字面量。

为了更好的衡量,做var items = {};

案例是您创建一个数组 item = [] 然后设置它的字符串属性。

JSON.stringify 期望看起来像数组的东西是数组,因此它甚至不会尝试迭代其非数字属性。

您的解决方案是用对象替换它 {}

规范摘录:

If Type(value) is Object, and IsCallable(value) is false
    If the [[Class]] internal property of value is "Array" then
        Return the result of calling the abstract operation JA with argument value.

其次是

Let len be the result of calling the [[Get]] internal method of value with argument "length".
Let index be 0.
Repeat while index < len
    Let strP be the result of calling the abstract operation Str with arguments ToString(index) and value.
    If strP is undefined
        Append "null" to partial.
    Else
        Append strP to partial.
    Increment index by 1.

参考文献:

如前所述,您需要将项目设为对象。这里有一个 JSFiddle 可以帮助您入门的示例。

var item;
var lines = ["a","b","c"];
var jsonObj = {};
jsonObj.items = [];

for (var i = 0 ; i < lines.length ; i++) {

    var label = lines[i];
    var value = 1;

    item = {};
   item["label"] = label;
   item["value"] = value;

    jsonObj.items.push(item);
    console.log(jsonObj);
}

var jsonString = JSON.stringify(jsonObj);
console.log(jsonString);