在JSON中获取嵌套对象的值

时间:2016-09-25 01:03:26

标签: javascript json

我想以编程方式在下面的JSON中获取 req1 值。这里也可以更改 RequestTypeItem ,因此它不是固定的。另外,我可以使用 object.subobject

进行导航

我能够使用

导航到广告位
var b = JSON.parse("{ .... }");
b.request.intent.slots.RequestTypeItem.value

但我可以以编程方式进一步导航。

{"request": {
  "locale": "en-US",
  "timestamp": "2016-09-25T00:36:14Z",
  "type": {
    "name": "request",
    "slots": {
      "RequestTypeItem": {
        "name": "RequestTypeItem",
        "value": "req1"
      }
    }
  }
}
}

2 个答案:

答案 0 :(得分:2)

在您的JSON中,您的请求没有 intent 的属性,它有一个属性 type ,因此您可以访问所需的属性

b.request.type.slots.RequestTypeItem.value

JSFiddle:https://jsfiddle.net/9cexbn54/

编辑:再次阅读您的问题后,也许这就是您想要的:

 // loop through all properties on the slots object
for (var i in b.request.type.slots) {
    if (b.request.type.slots.hasOwnProperty(i)) {  // make sure it is a property belonging directly to slots, and not "inherited" from the prototype chain
    if (b.request.type.slots[i].value) { // make sure that the sub-property of slots has a value property
      document.getElementById("output").innerHTML = b.request.type.slots[i].value;
      break; // break out of the loop after getting a value
    }  
  }
}

这里我循环遍历槽上的所有属性,检查属性确实属于槽,并且它具有value属性。

JSFiddle:https://jsfiddle.net/9cexbn54/1/

答案 1 :(得分:0)

我给了一个链接,其中有些人发现它没用。 以下是req1:

enter image description here

 $data=@'
[{"request": {
  "locale": "en-US",
  "timestamp": "2016-09-25T00:36:14Z",
  "type": {
    "name": "request",
    "slots": {
      "RequestTypeItem": {
        "name": "RequestTypeItem",
        "value": "req1"
      }
    }
  }
}
}]
'@
$json=ConvertFrom-Json $data
$json.request.type.slots.RequestTypeItem.value