问题
我想调用JSON.stringify传递我想要包含在字符串中的字段。我想要包含的一个字段是一个对象。 JSON.stringify方法不包含对象中的任何字段,如我所料。
这是我的较大对象的一小部分;
var person = {
name: "John Doe",
Address: { Line1: "100 north main", City: "Des Moines" },
Phone: "555-5555"
}
这是stringify方法调用
console.log(JSON.stringify(person,["name","Address"]));
以下是结果
"{\"name\":\"John Doe\",\"Address\":{}}"
这是我创建的js bin - http://jsbin.com/UYOVufa/1/edit?html,console。
我总是可以将person.Address字符串化并将其与另一个字符串结合起来,但感觉就像是矫枉过正。
我错过了什么?
谢谢,
答案 0 :(得分:3)
JSON.stringify接受replacer(该数组...)作为参数。 请注意替换器文档:
如果返回任何其他对象,则以递归方式对对象进行字符串化 进入JSON字符串,在每个属性上调用replacer函数, 除非对象是一个函数,在这种情况下,没有任何东西被添加到 JSON字符串。
(资料来源:https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_parameter)
这将有效:
JSON.stringify(person,["name","Address", "Line1", "City"])
答案 1 :(得分:2)
如上所述,JSON.stringfy进行递归替换,只需要输入键名来获取它。但是,也足够强大,可以轻松制作自己的json字符串版本。
我提出的实现所需解决方案的建议是
JSON.stringify(person, function(k,v){
if(k!=="Phone"){
return v;
}
});
该函数替换默认的替换器,并允许您输出任何所需的内容,而不会影响原始的json对象。想象一下可能性,大大增加对输出响应的控制。
答案 2 :(得分:1)
它检查每个键的字段列表,即使它是嵌套对象中的键:
JSON.stringify(person, ['name', 'Address', 'Line1', 'City'])
=> "{"name":"John Doe","Address":{"Line1":"100 north main","City":"Des Moines"}}"