字符串 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);
在迭代期间,label
和 value
都被相应地分配了正确的值。
然而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);
我正在尝试 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);
在迭代期间,label
和 value
都被相应地分配了正确的值。
然而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);