0

ISSUE
我想调用 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 进行字符串化并将其与另一个字符串结合起来,但这感觉有点矫枉过正。

我错过了什么?

谢谢,

4

3 回答 3

4

JSON.stringify 接受替换器(那个数组...)作为参数。注意替换文档:

如果您返回任何其他对象,则该对象将递归地字符串化为 JSON 字符串,并在每个属性上调用替换函数,除非该对象是一个函数,在这种情况下,不会向 JSON 字符串添加任何内容。

(来源:https ://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_parameter )

这将起作用:

JSON.stringify(person,["name","Address", "Line1", "City"])
于 2013-10-28T21:31:17.057 回答
2

如上所述,JSON.stringfy 进行递归替换,只需输入键名即可获取。但是,也足以轻松地制作您自己的 json 字符串版本。

我实现您想要的解决方案的建议是

JSON.stringify(person, function(k,v){
    if(k!=="Phone"){
        return v;
    }
});

该函数替换了默认替换器,让您可以在不影响原始 json 对象的情况下输出您想要的任何内容。想象一下可能性,大大增加了对输出响应的控制。

于 2013-10-28T22:56:56.477 回答
1

它检查每个键的字段列表,即使它是嵌套对象中的键:

JSON.stringify(person, ['name', 'Address', 'Line1', 'City'])

=> "{"name":"John Doe","Address":{"Line1":"100 north main","City":"Des Moines"}}"
于 2013-10-28T21:32:23.690 回答