【问题标题】:Searching for a specific key in a JSON object在 JSON 对象中搜索特定键
【发布时间】:2012-10-30 20:21:22
【问题描述】:

我目前正在尝试遍历一个看起来像这样的 JSON 对象:

"coupons":{
    "item1":{
         "id":"155",
         "name":"First Item",
         "value":-5199.6
    },
    "item2":{
         "id":"255",
         "name":"Second Item",
         "value":-424.91
    }
}

我想返回每个项目 id 的值。我怎样才能做到这一点?

我正在用 JS 编程。

谢谢!

【问题讨论】:

  • 为什么要使用带有item1、item2 等的对象?您应该改用数组。 {"coupons":[{"id":"155",...}, {"id":"255",...}]} 那你就可以data.coupons.map(function(obj) { return obj.id; });

标签: javascript json object loops iteration


【解决方案1】:
var coupons = {
    "item1":{
         "id":"155",
         "name":"First Item",
         "value":-5199.6
    },
    "item2":{
         "id":"255",
         "name":"Second Item",
         "value":-424.91
    }
}

var ids = [];
for(var item in coupons) {
    ids.push(coupons[item]['id']);
}

console.log(ids);

【讨论】:

    【解决方案2】:
    var obj = { 'json...' };
    
    for (var key in obj)
    {
        var item = obj[key];
        alert("id is " + item.id);
    }
    

    您可以使用var .. in obj 语法来迭代任何对象的属性(或关联索引;在 JS 中相同)。请始终注意您了解要迭代的对象,因为某些对象(例如数组)具有您希望避免迭代的其他属性。

    【讨论】:

      【解决方案3】:

      每个coupons[k] 都是物品,您可以使用coupons[k].id 获取id

      var coupons = {
          "item1":{
               "id":"155",
               "name":"First Item",
               "value":-5199.6
          },
          "item2":{
               "id":"255",
               "name":"Second Item",
               "value":-424.91
          }
      }
      
      for(var k in coupons){
            console.log(coupons[k].id);
      
      }
      

      【讨论】:

        【解决方案4】:

        我建议如下:

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
        <script>
        var dataset = {
                        "coupons":{
                            "item1":{
                                 "id":"155",
                                 "name":"First Item",
                                 "value":-5199.6
                            },
                            "item2":{
                                 "id":"255",
                                 "name":"Second Item",
                                 "value":-424.91
                            }
                        }
                    }
        
        $(document).ready(function(){
        
            $.each(dataset.coupons, function(i, item) {
                $("#data").append('<p>' + item.id + '</p>'); 
                $("#data").append('<p>' + item.name + '</p>'); 
                $("#data").append('<p>' + item.value + '</p>'); }
            );
        
        });
        
        </script>
        <div id="contentC"></div>
        

        【讨论】:

          【解决方案5】:

          您可以使用 DefiantJS (http://defiantjs.com),它使您能够使用 XPath 查询搜索 JSON 结构。此库使用“搜索”方法扩展全局对象 JSON,并返回一个包含匹配项的数组,如果有的话(空数组,我没有找到匹配项)。

          XPath 是一种标准化的查询语言,非常容易掌握。这是一个带有示例的测试工具; http://defiantjs.com/#xpath_evaluator

          看看这个工作小提琴;
          http://jsfiddle.net/hbi99/Yc6cc/

          var data = {
              ...
          },
          res = JSON.search( data, '//*[id]' ),
          str = '';
          
          for (var i=0; i<res.length; i++) {
              str += res[i].id +' : '+ res[i].name +'<br/>';
          }
          
          document.getElementById('output').innerHTML = str;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-09-10
            • 2021-12-12
            • 2012-11-23
            • 2015-01-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多