确定JSON解析错误的位置

时间:2012-10-22 22:30:09

标签: json parsing numbers line

我正在创建一个允许用户以JSON格式加载数据的Web应用程序。我目前正在使用以下函数来读取我保存在本地磁盘上的JSON文件:

function retrieveJSON(url, callback)
{
  // this is needed because FireFox tries to parse files as XML
  $.ajaxSetup({ mimeType: "text/plain" });

  // send out an AJAX request and return the result
  $.getJSON(url, function(response) {
    console.log("Data acquired successfully");
    callback(response);
  }).error(function(jqXHR, textStatus, errorThrown) {
    console.log("Error...\n" + textStatus + "\n" + errorThrown);
  });
}

这适用于格式良好的JSON数据。但是,对于格式错误的数据,控制台日志显示以下内容:

Error...
parsererror
SyntaxError: JSON.parse: unexpected character

这几乎完全没有用,因为它没有告诉我意外的字符是什么,或者它可以找到什么行号。我可以使用JSON验证器来更正本地磁盘上的文件,但是当页面从Web上的远程URL加载文件时,这不是一个选项。

如何获取任何错误的位置?如果可能的话我想获得令牌,但我需要至少获得行号。有一个项目要求向用户显示JSON代码的摘录,并突出显示发生错误的行。

我目前正在使用jQuery,但jQuery不是项目要求,因此如果另一个API或JSON解析器提供此功能,我可以使用它。

2 个答案:

答案 0 :(得分:2)

是的,有截止日期的生活绝非易事:)。

这可能会帮助你,经过几个小时的谷歌搜索,我在Git Hub上找到了jsonlint。它看起来很有前途,它包含一个可以在服务器端使用的shell script,并且它的browser JavaScript版本似乎正是您正在寻找的。

希望这对你有所帮助。

答案 1 :(得分:0)

我同意有最后期限的生活很艰难。 我是我自己的老板,我感到非常高兴,因为我不必遵守最后期限。

因此,为寻求更好的解决方案,我提出了以下建议:

stores = driver.find_elements_by_class_name('Teaser-titleLink')
for i in range(len(stores)):
    driver.find_elements_by_class_name('Teaser-titleLink')[i].click()
    driver.back()
driver.back()