我试图对具有额外属性的对象数组进行字符串化处理。
var data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
data.extra = ["a", "b"];
console.log(data)
// [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}, extra: ["a", "b"]]
console.log(JSON.stringify(data));
//[{foo: "1", bar: "2"}, {foo: "2", bar:"3"}]
问:为什么未对“额外”属性进行字符串化?如何在JSON.stringify()中保留缺少的属性?
因为data
不仅仅是一个对象-它还是一个数组。而且,当对数组进行json字符串化处理时,所有非数字属性都将从结果中丢弃(因为[...]
无论如何都无法用表示法表示它们)。
如果仍然想在JSON中查看该属性,则必须使用普通对象。您可以咬一下子弹,然后用{ ... }
糖“简单地对象化”原始数组:
const data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
data.extra = ["a", "b"];
JSON.stringify( {...data} );
// "{"0":{"foo":"1","bar":"2"},"1":{"foo":"2","bar":"3"},"extra":["a","b"]}"
...但是请注意,所有这些“ 0”,“ 1”道具都会照原样在您的JSON内部显示,而这并不是最好的视图。通常使用其他属性会更清洁:
const data = [{foo: "1", bar: "2"}, {foo: "2", bar:"3"}];
const extra = ["a", "b"];
const output = {
data,
extra
};
JSON.stringify(output);
// "{"data":[{"foo":"1","bar":"2"},{"foo":"2","bar":"3"}],"extra":["a","b"]}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句