首页 > 解决方案 > JSON.Stringfy 方法的替换参数不适用于嵌套对象

问题描述

我有一个对象,我想将这个对象的简化版本发送到服务器。

{
 "fullName": "Don Corleone",
 "actor": {
  "actorId": 2,
  "name": "Marlon",
  "surname": "Brando",
  "description": "Marlon Brando is widely considered the greatest movie actor of all time... ",
  "heroList": [],
  "photo": "C:\\projects\\files\\actor\\1532955376934.png"
 },
 "heroProfilePhoto": "data:image/png;base64,/9j/...
 "production": {
  "title": "The Godfather",
  "imdbRate": 9.2,
  "genre": "8",
  "releaseDate": "1972-03-23T21:00:00.000Z",
  "director": "Francis Ford Coppola",
  "writer": "Mari Puzo",
  "detail": "The aging patriarch of an organized crime dynasty transfers control of his clandestine empire to his reluctant son."
 }
}"

我有两个问题::

1)是否可以使用JSON.stringify()的replacer 参数提取类似的内容?

 {
  "fullName": "Don Corleone",
  "actor": {
   "actorId": 2
   }
}"

2)至少我可以用JSON.stringify()的替换参数提取这样的东西吗?

{
 "fullName": "Don Corleone",
 "actor": {
  "actorId": 2,
  "name": "Marlon",
  "surname": "Brando",
  "description": "Marlon Brando is widely considered the greatest movie actor of all time... ",
  "heroList": [],
  "photo": "C:\\projects\\files\\actor\\1532955376934.png"
 },
}"

当我这样使用时,没关系:

JSON.stringify(hero, ['fullName'])结果->"{"fullName":"Don Corleone"}"

但是这个 :

JSON.stringify(hero, ['fullName', 'actor'])结果->"{"fullName":"Don Corleone","actor":{}}"

为什么演员属性是空的?

标签: javascripttypescript

解决方案


JSON.stringify要求您传递您想要返回的所有数据。'actor'光靠自己是不够的。

你要:

JSON.stringify(hero, ['fullName', 'actor', 'actorId'])

编辑

所以我做了一些测试,我很好奇如果actorId父对象中也存在会发生什么,结果在。

在对象内部和父对象内部存在的情况下,这两个actorId字段都由 JSON.stringify() 返回。如果您不希望出现这种情况,则必须根据需要创建一个更复杂的函数并将其传递给 JSON.stringify(),如此处所述actorIdactor

这里有一些例子:

var json = {
    key1: "Value for key1 in parent",
    key2: {
        key3: "Value for key3 in child",
        key4: "Value for key4 in child"
    },
    key4: "Value for key4 in parent"
}

var out1 = JSON.stringify(json, ['key1', 'key3'])
/*
out1 = {
    key1: "Value for key1 in parent"
} // No key3!
*/


var out2 = JSON.stringify(json, ['key1', 'key2', 'key3'])
/*
out2 = {
    key1: "Value for key1 in parent",
    key2: {
        key3: "Value for key3 in child"
    }
}
*/

var out3 = JSON.stringify(json, ['key1', 'key2', 'key3', 'key4'])
/*
out3 = {
    key1: "Value for key1 in parent",
    key2: {
        key3: "Value for key3 in child",
        key4: "Value for key4 in child" // Both key4 returned
    },
    key4: "Value for key4 in parent" // Both key4 returned
}
*/

推荐阅读