Json.stringify其中一个字段是对象的特定字段

时间:2013-10-28 21:21:18

标签: json

问题
我想调用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字符串化并将其与另一个字符串结合起来,但感觉就像是矫枉过正。

我错过了什么?

谢谢,

3 个答案:

答案 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"}}"