当我将函数作为第二个参数传递给JSON.stringify()
并测试键的值时,我得到了未定义。知道为什么吗?
var person = {
name: "Siddharth",
age: 23,
sex: 0,
phone: 12345
};
personString = JSON.stringify(person, personFilter, 2);
console.log(personString);
function personFilter(key, value) {
if (key == "age") {
return value;
}
}
答案 0 :(得分:3)
如果您只想获得“年龄”,则可以使用数组而不是函数:
personString = JSON.stringify(person, ["age"], 2);
If you use a function, it is getting the whole object first
replacer参数可以是函数,也可以是数组。作为一个函数,它需要两个参数,键和值被字符串化。找到密钥的对象作为replacer的this参数提供。 最初使用表示要进行字符串化的对象的空键调用,然后为要进行字符串化的对象或数组上的每个属性调用它。它应该返回应该添加到JSON字符串的值,如下所示:
如果返回Number,则将与该数字对应的字符串用作添加到JSON字符串时的属性值。 如果返回String,则在将该字符串添加到JSON字符串时,该字符串将用作属性的值。
如果返回布尔值,则在将其添加到JSON字符串时,将“true”或“false”用作属性的值。
如果返回任何其他对象,则会以递归方式将对象字符串化为JSON字符串,并在每个属性上调用replacer函数,除非该对象是函数,在这种情况下,不会向JSON字符串添加任何内容。 / p>
- 如果返回undefined,则该属性不包含在输出JSON字符串中。
至于为什么整个对象的键是空的...它确实是唯一的选项 - 其他任何东西都可以是对象属性的键,空键是只有他们可以使用的东西,你可以知道 - 在变换器函数内 - “这绝对是整个对象”,无论对象包含什么。
所以在你的情况下,它看起来像:
personString = JSON.stringify(person, personFilter, 2);
function personFilter(key, value) {
if (key == "age" || key == "") {
return value;
}
}