在jQuery中循环JSON响应

在jQuery中循环JSON响应,jquery,json,Jquery,Json,我有一个从api调用返回的json数组,如下所示: ["meta", {"previous"=>nil, "total_count"=>12, "offset"=>0, "limit"=>1, "next"=>"/v1/Account/MAMTE4MTHJNJRKODBIMD/AvailableNumberGroup/?prefix=415&limit=1&country_iso=US®ion=NY&offset=1"}]["api_id",

我有一个从api调用返回的json数组,如下所示:

["meta", {"previous"=>nil, "total_count"=>12, "offset"=>0, "limit"=>1, "next"=>"/v1/Account/MAMTE4MTHJNJRKODBIMD/AvailableNumberGroup/?prefix=415&limit=1&country_iso=US®ion=NY&offset=1"}]["api_id", "441d610c-bede-11e2-815d-22000abcc0e1"]["objects", [{"stock"=>57, "voice_enabled"=>true, "region"=>"New York, UNITED STATES", "voice_rate"=>"0.00900", "prefix"=>"631", "sms_rate"=>"0.00800", "number_type"=>"local", "setup_rate"=>"0.00000", "rental_rate"=>"0.80000", "group_id"=>"11411650673450", "sms_enabled"=>true, "resource_uri"=>"/v1/Account/MAMTE4MTHODBIMD/AvailableNumberGroup/11411650673450/"}]]
我可以用这个打印整个阵列

success: function(response){
             $.each([response], function(i, objects) {
             var list = "<li>" + objects + "</li>";
             $('#result').append(list);
             });
成功:功能(响应){
$。每个([响应]、函数(i、对象){
var list=“
  • ”+对象+”
  • ”; $(“#结果”)。追加(列表); });
    如何提取指定的项目并在
  • 中打印它们。
  • 以列出部分但不是全部元素


    非常感谢!

    您可以通过访问“i”来实现这一点。这将拥有所有JSON对象的属性

    success: function(response){
                 $.each([response], function(i, objects) {
                 var list = "<li>" + **i.previous** + "</li>";
    
                 $('#result').append(list);
                 });
    
    输出为:

    flammable: inflammable 
    duh: no duh
    

    首先,这不是有效的JSON,因为不允许使用箭头语法=>并且应该在值中添加双引号。此外,语法似乎不太一致,看起来在根级别有多个数组。 要使其成为JSON,您需要“key”:“value”格式,“meta”没有值

    如果可以,您需要将其更改为:

    { "meta" : { "previous" : "nil", "total_count" : "12" (...) } }
    
    如果在“元”中需要多组数据:

    之后,您可以执行(第一个选项):

    函数(json){
    变量键,$result=$(“#result”);
    for(输入json.meta){
    $result.append(“
  • ”+json.meta[key]+“
  • ”) } }
    或(第二种选择):

    函数(json){
    变量项,键,$result=$(“#result”);
    for(json.meta中的项){
    for(输入json.meta[item]){
    $result.append(“
  • ”+json.meta[item][key]+”
  • ”) } } }
    var arr=[“meta”、{“previous”=>nil、“total”=>12,“offset”=>0,“limit”=>1,“next”=>“/v1/Account/mamte4mthjrkodbimd/AvailableNumberGroup/?prefix=415&limit=1&country\iso=NY&offset=1”][“api\u id”、“441d610c-bede-11e2-815d-22000abcc0e1”][“objects”、{“stock”=>57”、启用语音的”=>,“语音费率”=>“0.00900”、“前缀”=>“631”、“短信费率”=>“0.00800”、“数字类型”=>“本地”、“设置费率”=>“0.00000”、“租金费率”=>“0.80000”、“组id”=>“1141160673450”、“启用短信”=>true、“资源uri”=>“/v1/Account/MAMTE4MTHODBIMD/AvailableNumberGroup/1141160673450/”);
    
    对于(var i=0;i您需要一个双重迭代,一个迭代用于
    对象[]
    中的每个对象,另一个迭代用于对象中的每个

    例如,在中,使用中的示例


    谢谢,i.previous应该是什么?例如i.voice\u rate?如果你是指i.voice\u rate(这是其中一个对象),恐怕它不起作用。谢谢,我不能(或不确定如何)如果你没有像我告诉你的那样有效的JSON,任何方法都不会起作用,除非你没有实际使用JSON或者你没有透露一些信息。谢谢,我没有隐瞒信息。我得到的数据是返回的,我不确定如何得到“正确的”“JSON。例如,在jquery脚本中,我放入$.each(response等)时,我没有得到任何返回,当我放入$.each([response](wiht[])时,我得到了您注意到的非JSN,因为它变成了一个数组。那么该怎么办呢?应该像您在本页上可以找到的那样:(大约向下3/4)。我不确定出了什么问题。例如,我需要在上面的原始jquery中指定数据类型吗?感谢您的耐心,请不要放弃!谢谢,这部分是有效的…因为它会为每个字母(而不是对象)创建一个长的垂直列表对象的。我需要生成如下列表:
  • 语音速率:obj_voice_rate
  • 这就是它的样子:我需要访问对象部分。这是JSON还是您保留了任何信息?谢谢,这看起来很好,我会看看是否可以解决它。但是,我设想可能会有问题(正如我们已经讨论过的,关于有效的json。我上面的jquery脚本返回“无效”的json数据有什么问题吗?不管怎样,谢谢你(所有人)在这方面的想法。你可以想象它一直让我如坐针毡。如果你打电话到
    https://api.plivo.com/v1/Account/{auth_id}/AvailableEnumberGroup/
    在浏览器中使用您的身份验证id(不要粘贴它!),并且存在
    =>
    ,那么它是无效的JSON,但我无法想象公众可用的资源会生成无效的JSON。您问题中的“JSON”看起来像PHP数组。
    { "meta" : { "previous" : "nil", "total_count" : "12" (...) } }
    
    { "meta" : [ { "previous" : "nil", "total_count" : "12" (...) }, (...) ] }
    
    function(json) {
      var key, $result = $('#result');
      for (key in json.meta) {
        $result.append("<li>" + json.meta[key] + "</li>")
      }
    }
    
    function(json) {
      var item, key, $result = $('#result');
      for (item in json.meta) {
        for (key in json.meta[item]) {
          $result.append("<li>" + json.meta[item][key] + "</li>")
        }
      }
    }
    
    var arr = ["meta", {"previous"=>nil, "total_count"=>12, "offset"=>0, "limit"=>1, "next"=>"/v1/Account/MAMTE4MTHJNJRKODBIMD/AvailableNumberGroup/?prefix=415&limit=1&country_iso=US®ion=NY&offset=1"}]["api_id", "441d610c-bede-11e2-815d-22000abcc0e1"]["objects", [{"stock"=>57, "voice_enabled"=>true, "region"=>"New York, UNITED STATES", "voice_rate"=>"0.00900", "prefix"=>"631", "sms_rate"=>"0.00800", "number_type"=>"local", "setup_rate"=>"0.00000", "rental_rate"=>"0.80000", "group_id"=>"11411650673450", "sms_enabled"=>true, "resource_uri"=>"/v1/Account/MAMTE4MTHODBIMD/AvailableNumberGroup/11411650673450/"}]];
    
        for(var i=0;i<arr.length;i++){
            var obj = arr[i];
            for(var key in obj){
                var attrName = key;
                var attrValue = obj[key];
                //your condition goes here then append it if satisfied
                var list = "<li>" + obj[key]+ "</li>";
                $('#result').append(list);
            }
        }
    
    var jsonResponse = '{"meta": {"previous": null, "total_count": 1, "offset": 0, "limit": 20, "next": null }, "api_id": "26590c12-5831-11e1-86da-6ff39efcb949", "objects": [{"voice_enabled": true, "voice_rate": "1.1"}, {"voice_enabled": false, "voice_rate": "1.2"} ] }';
    
    $('#simulateAjax').on('click', function() {
        // cannot make call due to cross-domain security (and the API URL is unknown!) so just fake call the success function with valid JSON
    /*    $.ajax({
          url: 'test.html',
          dataType: 'json'
        }).done(success);
    */
        success($.parseJSON(jsonResponse));
    
        function success(response) {
            var items = '';
            $.each(response.objects, function(index, obj) {
                // obj here is one "object", we need to iterate the contents of each "obj"
    
                $.each(obj, function(k, v) {
                    // k here is the key
                    // v is the value
                    items += '<li>' + k + ' : ' + v + '</li>';
                });
            });
            $('#result').append(items);
        }
        return false;
    });
    
    var item = '<li>';
    
    $.each(obj, function(k, v) {
        item += k + ' : ' + v + ', ';
    });
    
    item += '</li>';
    items += item;