在JSON中搜索项目

时间:2017-10-23 13:16:55

标签: angular

我有一个Web应用程序,它使用来自另一个Web服务的数据,它们是JSON格式的。我将数据订阅为results[],我可以通过获取html中的每个索引来访问每个字段,例如{{results?.ABC.D[0].Name[0]}},然后返回Susan。 (请参阅下面的数据示例)。

我想要做的是在results中搜索以查找Name并返回G。基本上,我希望获得GD位于同一数组Name时的内容。

{
    "ABC": {
        "D": [
            {
                "Name": [ "Susan" ],
                "F": [ "School_0" ],
                "G": [ "14" ]
            },
            {
                "Name": [ "Lydia" ],
                "F": [ "School_1" ],
                "G": [ "284" ]
            }
        ]
    }
}

3 个答案:

答案 0 :(得分:3)

我认为这就是你所需要的:

假设我们拥有的数据样本如下:

 let dataSample =
      {
        "ABC": {
          "D": [
            {
              "Name": [
                "Susan",
                "Sophia"
              ],
              "F": [
                "School_0"
              ],
              "G": [
                "14"
              ]
            },
            {
              "Name": [
                "Lydia"
              ],

              "F": [
                "School_1"
              ],
              "G": [
                "284"
              ]
            }
          ]
        }
      }

如果你想迭代所有的Name [],那么你也应该在“Name”数组中找到你想要的名字的索引并检索它,然后找到包含那个的“D”的索引检索到的名称像这样:

    let names = ["Sophia", "Susan", "Lydia"];

    names.forEach(function(name) {
    this.findNameG(name)
    })

    function findNameG(nameToFind: String) {        
    let index = dataSample.ABC.D.findIndex(d => d.Name[d.Name.findIndex(name => name === nameToFind)]);
    console.log(dataSample.ABC.D[index].G);
}

所以你需要先找到名字的索引,然后在该索引处返回G的值。

请考虑这是区分大小写的,如果您想要明智的话,您应该对源和目标使用toLowerCase()或toUpperCase()方法。

希望这有帮助。

答案 1 :(得分:0)

您是否想要返回G,条件是您有姓名[0]值? 在这种情况下:

 {{results?.ABC.D[0].Name[0] ? results?.ABC.D[0].G : '' }} 

答案 2 :(得分:0)

你可以试试这个

jsonData = {
"ABC":{
   "D":[
      {
         "Name":[
            "Susan"
         ],
         "F":[
            "School_0"
         ],
         "G":[
            "14"
         ]
      },
      {
         "Name":[
            "Lydia"
         ],

         "F":[
            "School_1"
         ],
         "G":[
            "284"
         ]
      }
   ]
}
}

你可以这样检查,但我相信必须有一个简单的解决方案

for (var key1 in this.jsonData) {
  if (this.jsonData.hasOwnProperty(key1)) {
      for (var key2 in this.jsonData[key1]){
        if (this.jsonData[key1].hasOwnProperty(key2)){
          if(key2 == "D"){
            for (var key3 in this.jsonData[key1][key2]){
              if (this.jsonData[key1][key2].hasOwnProperty(key3)){
                if(this.jsonData[key1][key2][key3]["Name"][0] == "Susan"){
                  console.log(this.jsonData[key1][key2][key3]["G"][0])
                }
              }
            }
          }
        }
      }
  }
}