元素列表解析 JSON 后缺少 ]

Posted

技术标签:

【中文标题】元素列表解析 JSON 后缺少 ]【英文标题】:missing ] after element list parsing JSON 【发布时间】:2010-10-21 21:59:05 【问题描述】:

执行:

$.post(
"/url/to/method",
 ,
function(data)
    var obj2 = eval("("+$(data).children()+")");
    // OR var obj = $.evalJSON($($(data).children())); // Jquery-json
    $body = $("#AAA");
    $body.html(obj.fied);
,
 "xml"
);

而在萤火虫中变成“元素列表后缺少]”(在第 5 行或第 6 行)错误。方法的 JSON 输出已通过 jsonlint.com/

验证

可能很明显,但我是 AJAX/JSON 的新手。谢谢

【问题讨论】:

不要使用eval解析JSON数据。请改用JSON.parse @Gumbo,同意 JSON.parse 可以在json.org/js.html找到 如果您发布 JSON,它会更容易提供帮助。 也使用jslint.com 进行验证! :) 【参考方案1】:

使用JSON.parse 方法,或者在将它传递给eval 之前确保在括号旁边包含一个空格...

eval(" (" + data + ") ");

【讨论】:

使用带空格的 eval 仍然不行(同样的错误)。使用 JSON.parse 我出现一个奇怪的错误:text.replace 不是函数,json2.js:445 请发布 JSON。如果它包含敏感信息,请使用虚拟数据重新创建错误。显然有问题。【参考方案2】:

您是在 .NET 2.0 中编写的吗?如果是这样,请尝试将您的数据构造成查询字符串,而不是传递 JSON 对象。

示例: var1=alma&var2=用户

其中“var1”和“var2”是您的网络方法期望的参数名称。使用帖子传递这个..数据:querystring 我在 2.0 中将 JSON 传递给 web 服务时遇到了问题。

祝你好运

【讨论】:

【参考方案3】:

可能发生的情况是您的 $.post 调用已经返回一个 JSON 对象。 jQuery 将尝试自动检测 JSON 并为您解析它。当您对这样的 JSON 对象调用 eval 时,您会看到此错误。偷偷摸摸!只需按原样使用数据对象即可。

【讨论】:

我遇到了这个问题,现在只使用我能够访问 JSON 成员的对象。谢谢。 我也能够用这个答案解决我的问题。谢谢。【参考方案4】:

原来 jQuery 会尝试判断结果是否为 JSON 并自动解析它,但在这种情况下,数据已经是一个 javascript 对象,而不是等待解析的 JSON 字符串。所以你可以直接使用这个对象,而不是使用 eval() 和 JSON.parse。

【讨论】:

以上是关于元素列表解析 JSON 后缺少 ]的主要内容,如果未能解决你的问题,请参考以下文章

JQuery 从解析的 JSON 向列表中添加元素

通过 RestKit 使用单个字符串元素列表解析 JSON

列表解析式

解析式表达式

将 JSON 解析为 Dart 中的列表

将 json 列表解析为 Java 对象列表