【问题标题】:how to parse json array如何解析json数组
【发布时间】:2014-06-20 12:22:53
【问题描述】:

我正在尝试解析这样的内容

{
"popular result":[
    {"term":"Summer","url":"http://summer.com"},
    {"term":"Autumn","url":"http://autumn.com"},
    {"term":"spring","url":"http://spring.com/"},
    {"term":"winter","url":"http://winter.com/"}]
}

<script type="text/javascript">
    $(document).ready(function () {

        $.getJSON('/Controls/GetPopularSearches', function (json) {
            for (var i = 0; i < json.length; i++) {
                $.each(myJson.i, function (key, value) {
                    alert(value.term);
                });​
            }

        });
    });
</script>

但是什么也没发生!因为是数组中的数组!请告诉我该怎么做

【问题讨论】:

  • myJson 变量从何而来?
  • myJson 应该代表什么?

标签: javascript json


【解决方案1】:

数组和对象是不同的东西。在事情变得真正具有挑战性之前,您需要对它们进行更多调查。

假设 json 确实等于您提供的 object(在 JSON 中显示为 {}),然后是 json['popular result'](如果没有,您可以使用 .一个空格)是您要遍历的数组(在 JSON 中显示在 [])。

由于某种原因,这种混乱让你循环了一个对象(不会让你到达任何地方,因为很少为它定义 length)然后(忽略 myJson 上的错字),你开始循环遍历某个对象不存在(它没有崩溃 b/c 它从未到达那里)。

清理它...

<script type="text/javascript">
    $(document).ready(function () {
        $.getJSON('/Controls/GetPopularSearches', function (json) {
            for (var i=0;i<json['popular result'].length;i++) {
                alert(json['popular result'][i].term + ' points to the URL ' + json['popular result'][i].url);
            }
        });
    });
</script>

注意警报如何引用json 对象(即您的变量名)、popular result 数组,然后[i] 是该数组中的“行”,以及该对象的term/url 元素行。

注意:在调试时运行带有大量警报的东西很烦人。查看console.log

【讨论】:

    【解决方案2】:

    您不需要$.each,您需要遍历数组集作为popular result 的值,它位于包含对象内。

    $.getJSON('/Controls/GetPopularSearches', function (json) {
      var arr = json['popular result'];
      for (var i = 0, l = arr.length; i < l; i++) {
        console.log(arr[i].term);
      }
    });
    

    Demo.

    【讨论】:

      【解决方案3】:

      检查这个小提琴

      var jsontext =
          '{"popularresult":[{"term":"Summer","url":"http://summer.com"},{"term":"Summer","url":"http://summer.com"}]}';
      var getContact = JSON.parse(jsontext);
      
      for (i = 0; i < getContact.popularresult.length; i++) {
          alert(getContact.popularresult[i].term);
      }
      

      http://jsfiddle.net/ae8gd/

      【讨论】:

        【解决方案4】:

        如果你得到了如图所示的 jsonObject 则

         var JsonArray=json.popular; //get jsonArry
         $.each(JsonArray,function(i,val){
         // do logic
         }); 
        

        要解析 json 使用 JSON.parse();

        【讨论】:

        • 没有。真的没有理由使用evil()。不要建议evil(),甚至不要考虑evil()。并且不要,看在上帝的份上,不要将evil() 拼错为eval()。顺便说一下,JSON.parse() 是原生 JS。它与 jQuery 无关。
        • 免责声明:顺便说一句,不要把我之前的评论看得太认真。只是提出一些建议;-) 已删除反对票。
        猜你喜欢
        • 2015-09-06
        • 2013-12-29
        • 1970-01-01
        • 2015-09-15
        • 2012-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多