从J SON子数组中检索值

时间:2015-12-08 21:03:20

标签: jquery json ajax

我正在尝试检索JSON数组中存在的值。但是,我的代码无法执行它.Below发布的是该文件的样子。

   {

     "meta" : 
          {

          "view" : 
             {


             "description" : "This data set shows the location of Baltimore  
                              City's  Services.",
             "columns" :
                          [ {

                             "cachedContents" : 
                                              {

                                               "top" :
                                                      [
                                                      {
                                         "item" : "American Rescue Workers"
                                                       }]

                                                      }]      

                                                       }
                                                       }

我的抱歉,如果我的JSON文件有一些语法问题。我正在尝试访问cachedContents中的item元素。发布的是代码。

      $(document).ready(function(){
      $.get("https://data.baltimorecity.gov/api/views/hyq3- 
      8sxr/rows.json",function(data)
      {
            $.each(data.meta.view,function(i,obj)
                {
                      if(i=="name")
                         $("#result").append("<p align='center'>"+obj+" 
                          </p>");
                      if(i=="description")
                       $("#result").append("<p align='center'>"+obj+"</p>");
                       if(i=="columns")

                      var length = data.meta.view.columns.length;
                                     for(i2=0;i2<length;i2++)
                                     {


                  $.each(obj[i2].columns.cachedContents,function(i,obj[i2]){
                  $("#result").append("<p align='center'>"+"Hello"+"</p>")   
                                    });



                                     }  });  }); });

我得到的错误是

      SyntaxError: missing ) after formal parameters
      $.each(obj[i2].columns.cachedContents,function(i,obj[i2]){

任何建议都会有所帮助

2 个答案:

答案 0 :(得分:2)

您正在尝试命名参数obj[i2],这是不合法的。

答案 1 :(得分:1)

正如已经指出的那样,你正在使用非法的参数名称。在这种情况下,您正在做的是为回调创建匿名函数并声明参数。 Javascript将负责将obj [i2]值传递给函数。您也可以考虑不使用i2,i3,i4等,因为它变得难以阅读更复杂。

此外,您的代码可以使用一些工作来使其更容易使用和更高效。

最重要的是,你在循环中使用JQuery选择器,这需要程序每次都遍历DOM。相反,你应该像这样缓存对象:$ result = $(“#result”);

您通过使用多个if语句以冗余方式检查“i”的状态。相反,名称和描述的一个语句使其更快,然后使用else,如果这样,如果它在第一种情况下返回true,则不必进行第二次检查。

最后,创建一个命名函数并将其作为回调传递更具可读性,并且有助于模块化和可重用性,而不是创建一串匿名函数。

提供的代码应该可以正常工作,尽管我没有其他项目来测试它。

$(document).ready(function(){

  function someFunction(){

    $.get("https://data.baltimorecity.gov/api/views/hyq3-8sxr/rows.json", parseData(data));

    function parseData(data){
      var $result = $("#result");  

      $.each(data.meta.view, appendData(index, value))

      function appendData(index, value){
        var leng;

        if(index === "name" || index === "description"){
          $result.append("<p align='center'>"+value+"</p>");
        }else if(index === "columns"){
          leng = data.meta.view.columns.length;
        }

        for(var j = 0; j > leng; j++){
          value[j].columns.cachedContents.forEach(
              function(val){
                $result.append("<p align='center'>"+"Hello"+"</p>");
              }
            );
        }
      }
    }

  }


});