JSON.stringify不会对嵌套数组进行字符串化

时间:2015-04-12 04:01:38

标签: json

我目前正在调查为什么JSON.stringify()无法正确解析我的对象。这是我的目标,我试图解析为JSON字符串:

var data = [{
    name: string,
    active: bool,
    data: [
        value: number,
        date: string
    ]
}]

但是,在我的对象上调用JSON.stringify()时,我得到的结果类似于:

/* JSON.stringify(data) */
[{
    name: string,
    active: bool,
    data: [
        [Object],
        [Object],
        ...
    ]
}]

JSON.stringify是否有细微差别导致这种情况发生?如果有助于澄清任何细节,我很乐意在我的问题中添加更多细节。

3 个答案:

答案 0 :(得分:3)

我认为您的数据阵列应该是这样的:

var data = [{
name: string,
active: bool,
data: { //Use {} instead of []
    value: number,
    date: string
  }
}]

答案 1 :(得分:1)

您需要将data的值更改为JSON object而不是JSON array才能使其正常工作。

JSON.stringify()似乎没有任何问题地解析它:

工作示例:

var o1 = [{
    "name":"string",
    "active":"bool",
    "data":{
        "value":"number",
        "date":"string"
    }
}];
var o2 = [{
    "name":"string",
    "active":"bool",
    "data":[
        "value",
        "number",
        "date",
        "string"
    ]
}];

console.log(JSON.stringify(o1)); // outputs: [{"name":"string","active":"bool","data":{"value":"number","date":"string"}}]
console.log(JSON.stringify(o2)); // outputs: [{"name":"string","active":"bool","data":["value","number","date","string"]}]

答案 2 :(得分:1)

您实际上可以使用JSON.stringify的第二个参数。有两个选项,你可以指定你想要字符串化的所有道具名称:

var data = [{
name: string,
active: bool,
data: [
    {value: number},
    {date: string}
  ]
}]

JSON.stringify(data, ['name', 'active', 'data', 'value', 'date'])

=> '[{
  "name":"string",
  "active":"bool",
  "data":[
    {"value":"number"},
    {"date":"string"}
  ]}
]'

或者使用具有相同结果的替换函数:

JSON.stringify(data, function replacer(key, value) { return value})

=> '[{
  "name":"string",
  "active":"bool",
  "data":[
    {"value":"number"},
    {"date":"string"}
  ]}
]'

原始来源:https://javascript.info/json