【问题标题】:Parse JSON using map() in JS在 JS 中使用 map() 解析 JSON
【发布时间】:2022-01-20 15:48:03
【问题描述】:

我需要从这样的 JSON 中获取所有“需要”值:

var body = {"payload":[
   {
      "analitic": {
         "id": 9448,
         "name": "Group"
      },
      "key": 27,
      "data": [
         {
            "id": 35368,
            "name": "sku",
            "value": "1",
            "valueId": "Need_1"
         }
      ]
   },
   {
      "analitic": {
         "id": 9448,
         "name": "Group"
      },
      "key": 110,
      "data": [
         {
            "id": 35368,
            "name": "sku",
            "value": "1",
            "valueId": "Need_2"
         }
            ]
         }      
]
   }

我认为为此使用 map()。我在正确的轨道上吗?我如何获得这些值? (我把json缩小了,原来还有很多其他字段我不需要)

更新: 研究了codecademy后的解决方案竟然是这样的:

body.payload.map(function(i) {return i.data.filter(function(j) 
{return j.id == 35368}).map(function(k) 
{return k.valueId})}).join(",")

// result: "Need_1, Need_2"

【问题讨论】:

  • 有什么问题?
  • JS 中任何以= { 开头的都不是 JSON。

标签: javascript json parsing


【解决方案1】:

学习了codecademy之后的解决方案竟然是这样的:

body.payload.map(function(i) {return i.data.filter(function(j) 
{return j.id == 35368}).map(function(k) 
{return k.valueId})}).join(",")

// result: "Need_1, Need_2"

【讨论】:

    【解决方案2】:

    考虑到您的“数据”键是一个只有 1 个元素的数组,您可以在数组中提取需要的值,如下所示:

    var body = {"payload":[
       {
          "analitic": {
             "id": 9448,
             "name": "Group"
          },
          "key": 27,
          "data": [
             {
                "id": 35368,
                "name": "sku",
                "value": "1",
                "valueId": "Need_1"
             }
          ]
       },
       {
          "analitic": {
             "id": 9448,
             "name": "Group"
          },
          "key": 110,
          "data": [
             {
                "id": 35368,
                "name": "sku",
                "value": "1",
                "valueId": "Need_2"
             }
                ]
             }      
    ]
       }
       
     var res = body['payload'].map((arr)=>arr['data'][0]['valueId']);
     console.log(res);

    【讨论】:

    • “原始数据中还有许多其他字段我不需要” - 因此,虽然这适用于问题中的数据,但它可能不适用于实际数据。
    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2022-09-23
    • 2019-11-08
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多