首页 > 解决方案 > 从复杂的不一致 JSON 中检索数据

问题描述

我正在尝试从使用 POST 查询检索的 JSON 对象设置变量。但是结果并不是每次都以相同的顺序返回,所以它并不总是有效。我不确定如何正确设置我的变量,数组位置不保持不变:

var idle = Example1.results[0].data[1].stats.count;
var waiting = Example1.results[1].data[0].stats.count;

(即这适用于示例 1,但不适用于示例 2)

Example1 = {"results":[{"group":{"queueId":"someID"},"data":[{"metric":"oOnQueueUsers","qualifier":"INTERACTING","stats":{"count":2}},{"metric":"oOnQueueUsers","qualifier":"IDLE","stats":{"count":5}}]},{"group":{"queueId":"someID","mediaType":"voice"},"data":[{"metric":"oWaiting","stats":{"count":0}}]}]}

Example2 = {"results":[{"group":{"queueId":"someID","mediaType":"voice"},"data":[{"metric":"oWaiting","stats":{"count":1}}]},{"group":{"queueId":"someID"},"data":[{"metric":"oOnQueueUsers","qualifier":"INTERACTING","stats":{"count":4}},{"metric":"oOnQueueUsers","qualifier":"IDLE","stats":{"count":6}}]}]}

标签: javascriptarraysjson

解决方案


您可以使用find()some()来获得您想要的结果。

const example1 = { results: [ { group: { queueId: "someID" }, data: [ { metric: "oOnQueueUsers", qualifier: "INTERACTING", stats: { count: 2 }, }, { metric: "oOnQueueUsers", qualifier: "IDLE", stats: { count: 5 } }, ], }, { group: { queueId: "someID", mediaType: "voice" }, data: [{ metric: "oWaiting", stats: { count: 0 } }], }, ], }; 

const example2 = { results: [ { group: { queueId: "someID", mediaType: "voice" }, data: [{ metric: "oWaiting", stats: { count: 1 } }], }, { group: { queueId: "someID" }, data: [ { metric: "oOnQueueUsers", qualifier: "INTERACTING", stats: { count: 4 }, }, { metric: "oOnQueueUsers", qualifier: "IDLE", stats: { count: 6 } }, ], }, ], };

const idle1 = example1.results
  .find(a => a.data.some(d => d.qualifier === "IDLE"))
  .data.find(b => b.qualifier === "IDLE").stats.count;

const waiting1 = example1.results
  .find(a => a.data.some(d => d.metric === "oWaiting"))
  .data.find(b => b.metric === "oWaiting").stats.count;

const idle2 = example2.results
  .find(a => a.data.some(d => d.qualifier === "IDLE"))
  .data.find(b => b.qualifier === "IDLE").stats.count;

const waiting2 = example2.results
  .find(a => a.data.some(d => d.metric === "oWaiting"))
  .data.find(b => b.metric === "oWaiting").stats.count;

console.log({ idle1 }, { waiting1 }, { idle2 }, { waiting2 });


推荐阅读