代码之家  ›  专栏  ›  技术社区  ›  Muhammed Ozdogan

Stringfy方法的replacer参数不适用于嵌套对象

  •  6
  • Muhammed Ozdogan  · 技术社区  · 6 年前

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

    {
     "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)是否可以用 replacer parameter 属于 JSON.stringify() ?

     {
      "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":{}}"

    为什么actor属性为空?

    2 回复  |  直到 6 年前
        1
  •  6
  •   Woohoojin    6 年前

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

    你想要:

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

    编辑

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

    两者 阿克托里德 在以下情况下,JSON.stringify()返回字段 阿克托里德 存在于 actor 对象,以及父对象内部。如果您不希望出现这种情况,则必须根据需要创建一个更复杂的函数并将其传递给JSON.stringify(),如文档所示 here

    下面是一些例子:

    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
    }
    */
    
        2
  •  0
  •   Ananth    6 年前

    在对象文本中使用Spread很容易获得

    试着像

    const obj = {yourObj.fullname, yourObj.actor} const yourAnswer = JSON.stringify(obj)

    你可以参考链接 Spread_syntax

    由于JSON.stringify对于大型对象来说速度非常慢,请尝试使用上面的方法