【问题标题】:Looping JSON in jQuery在 jQuery 中循环 JSON
【发布时间】:2015-06-27 10:58:08
【问题描述】:

我知道以前有人问过这个问题,但我无法让它工作。非常感谢任何帮助。

这是 var obj 的内容:

{
    "1": {
        "key1": "val",
        "key2": "val2"
    },
    "91": {
        "key1": "val",
        "key2": "val2"
    }
}

我是这样循环的..

$.post("path/to/script.php", {
    'param': $('#param').val()
}, function (r) {
    var obj = $.parseJSON(r);
    $.each(obj, function (k, v) {
        //doing some stuff with v.key1,v.key2 etc
    });
});

并且在 jQuery 的某处得到一个经典有用的 JS 错误

TypeError: 'in' 操作数 a 无效

【问题讨论】:

  • 尝试在回调中添加console.log( typeof r ),看看它说了什么?
  • 是的,r 和 obj 都是字符串。真的应该得到那个。为什么解析不正确?

标签: javascript jquery json foreach


【解决方案1】:

对象是嵌套的,所以你必须嵌套each。

var obj = {
    "1": {
        "key1": "val",
        "key2": "val2"
    },
    "91": {
        "key1": "val",
        "key2": "val2"
    }
};

如果您将 JSON 作为字符串获取,则需要将字符串解析为 JSON。

var r = '{"1": {"key1": "val","key2": "val2"},"91": {"key1": "val","key2": "val2"}}';

var obj = JSON.parse(r);
$.each(obj, function(k, v) {
  $.each(v, function(key, value) {
    console.log(value);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>

演示:https://jsfiddle.net/L09bjjtc/1/

如果您以 JSON 格式获取响应,则可以使用 post 方法的 dataType 选项:

$.post( "test.php", { func: "getNameAndTime" }, function( data ) {
    // data is JSON object
    // Data processing here
}, "json");

文档:https://api.jquery.com/jquery.post/

【讨论】:

  • 感谢您的尝试,但同样的问题。已经发现 r 和解析的变量 obj 都以字符串结尾
  • @MikeMiller 已将 json 添加为 dataType
猜你喜欢
  • 2017-08-04
  • 2012-12-08
  • 2013-04-08
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多