【问题标题】:how to fetch nested JSON values in typescript如何在打字稿中获取嵌套的 JSON 值
【发布时间】:2019-12-23 05:44:23
【问题描述】:

我正在尝试获取每个 id - 2434,78657 的所有 state 参数值。请帮助我了解如何在 typescript 中执行此操作。因为它是嵌套 JSON,我无法获取这些值

JSON 请求

                        { 
                           "2434":[ 
                              { 
                                 "eventId":"90989",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{  
                                        "priority":"1",
                                       "state":"InProgress"}
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "state":"InProgress"
                                    }
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "state":"Pending"
                                    }
                                 }
                              }
                           ],
                           "78657":[ 
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "state":"Pending"
                                    }
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "state":"Completed"
                                    }
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "state":"Failed"
                                    }
                                 }
                              }
                           ]
                        }

期望的输出:

例如,对于 id 2434,必须返回包含所有状态参数值的数组。

[进行中、进行中、待定]

【问题讨论】:

  • 我猜你的 JSON 格式不正确,无法对其进行迭代。
  • JSON 被编辑了一点。请找到它

标签: json angular typescript group-by jsonparser


【解决方案1】:

这是您需要的答案,

这个答案是 made dynamic 这样你就可以在你的 Object 中发送任意数量的键并且 它仍然返回所有的状态值键通过嵌套循环。

为你带来魔法的一段代码,

let object = {};
for (let key of Object.keys(test)) { 
    for (let value of test[key]) { 
        object[key] = object[key] || []
        object[key].push(value['event']['ServiceOrder']['state']
        )
     } 
 } 

代码执行:

let test = {
"2434":[
{ 
    "eventId":"90989",
    "eventTime":"2019-12-11T11:20:53+04:00",
    "eventType":"yyyy",
    "event":{ 
    "ServiceOrder":{  
        "priority":"1",
        "state":"InProgress"}
    }
},
{ 
    "eventId":"6576",
    "eventTime":"2019-12-11T11:20:53+04:00",
    "eventType":"yyyy",
    "event":{ 
    "ServiceOrder":{ 
        "priority":"1",
        "state":"InProgress"
    }
    }
},
{ 
    "eventId":"6576",
    "eventTime":"2019-12-11T11:20:53+04:00",
    "eventType":"yyyy",
    "event":{ 
    "ServiceOrder":{ 
        "priority":"1",
        "state":"Pending"
    }
    }
}
],
"78657":[ 
{ 
    "eventId":"6576",
    "eventTime":"2019-12-11T11:20:53+04:00",
    "eventType":"yyyy",
    "event":{ 
    "ServiceOrder":{ 
        "priority":"1",
        "state":"Pending"
    }
    }
},
{ 
    "eventId":"6576",
    "eventTime":"2019-12-11T11:20:53+04:00",
    "eventType":"yyyy",
    "event":{ 
    "ServiceOrder":{ 
        "priority":"1",
        "state":"Completed"
    }
    }
},
{ 
    "eventId":"6576",
    "eventTime":"2019-12-11T11:20:53+04:00",
    "eventType":"yyyy",
    "event":{ 
    "ServiceOrder":{ 
        "priority":"1",
        "state":"Failed"
    }
    }
}
]
}
let object = {};
for (let key of Object.keys(test)) { 
    for (let value of test[key]) { 
        object[key] = object[key] || []
        object[key].push(
            value['event']['ServiceOrder']['state']
        )
     } 
 } 
console.log(object);

请运行上面的sn-p

这里是O/P:

{ "2434": [ “进行中”, “进行中”, “待定”],“78657”:[ “待办的”, “完全的”, “失败”] }

Here is a working DEMO

【讨论】:

  • @SnehaAitha,很高兴为您提供帮助。觉得有用可以采纳我的回答。
  • @Sneha Aitha,你卡在哪里了吗?这个答案有用吗?
【解决方案2】:

我认为这个对你有帮助。 首先解码json。

$result =  json_decode($row[1]);
echo $result->{'2434'}[0]->event->ServiceOrder->{'**state**'};

结果如下。

answer: InProgress

【讨论】:

    【解决方案3】:

    检查这个,这里你必须传递你需要状态的特定 id(例如 2434)。 只需传递id,它就会以数组的形式返回状态。

    
    function getStatusFromId(id: number){
      return new Promise((resolve, reject) => {
        let idObject = NotificationData[id];
        let arrayOfStatus = new Array();
        idObject.forEach((data) => {
          arrayOfStatus.push(data.event.ServiceOrder["**state**"])
        })
        resolve(arrayOfStatus);
      })
    }
    
    
    getStatusFromId(id)
    .then((data) => {
      console.log(data)
    });
    
    let NotificationData = { 
                           "2434":[ 
                              { 
                                 "eventId":"90989",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{  
                                        "priority":"1",
                                       "**state**":"InProgress"}
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "**state**":"InProgress"
                                    }
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "**state**":"Pending"
                                    }
                                 }
                              }
                           ],
                           "78657":[ 
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "**state**":"Pending"
                                    }
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "**state**":"Completed"
                                    }
                                 }
                              },
                              { 
                                 "eventId":"6576",
                                 "eventTime":"2019-12-11T11:20:53+04:00",
                                 "eventType":"yyyy",
                                 "event":{ 
                                    "ServiceOrder":{ 
                                       "priority":"1",
                                       "**state**":"Failed"
                                    }
                                 }
                              }
                           ]
                        };
    
    
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2022-01-03
      • 1970-01-01
      • 2019-01-27
      • 2021-11-09
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多