JSON解析:意外的令牌错误

JSON解析:意外的令牌错误,json,parsing,Json,Parsing,我试图将字符串解析为JSON,但遇到了一个意外的令牌错误 我正在使用它检查有效性,没有出现任何解析错误,但仍然说eval由于意外的令牌而失败。如果您将JSON从下面粘贴到该网站,您可以看到它发现了一个错误,但没有指定是什么令牌导致了错误 这就是我要分析的 { "Polish": { "Rent": [ { "english": "a", "audioUrl": "b",

我试图将字符串解析为JSON,但遇到了一个意外的令牌错误

我正在使用它检查有效性,没有出现任何解析错误,但仍然说eval由于意外的令牌而失败。如果您将JSON从下面粘贴到该网站,您可以看到它发现了一个错误,但没有指定是什么令牌导致了错误

这就是我要分析的

{
    "Polish": {
        "Rent": [
            {
                "english": "a",
                "audioUrl": "b",
                "alternate": "c"
            },
            {
                "english": "d",
                "audioUrl": "e",
                "alternate": "f"
            }
        ]
    }
}
我错过了什么明显的东西吗


编辑
“Rent”键后面的:和[之间有一个无法打印的字符

在尝试解析之前,我正在对字符串执行一些replace()调用,这可能会造成问题

在解析之前,该特定行是

"Rent":"[
我想删除:和[sybmols]之间的双引号

因此,我使用:

var reg = new RegExp('":"', 'g');
var newStr = originalStr.replace(reg, '":');
我不知道为什么上面会导致无法打印的字符


EDIT2
我做了一个快速检查,删除了上面的replace()调用并将其粘贴到验证器中,手动删除了我使用replace()时使用的双引号,并且不可读的字符仍然存在。因此,错误出现在原始字符串中。因此,更多代码:|

字符串是从ajax调用返回到驻留在服务器上的php脚本的。php脚本读取服务器上的目录并填充嵌套关联数组以生成字符串,该字符串被发送回JS端,JS端对其进行编辑和解析(如上所示)

目录中有JSON文件,我将其内容插入到这个嵌套的数组结构中,以完成JSON层次结构

不可读的字符是

ef bb高炉

我在谷歌上搜索了一下,发现它是表示文件内容的字符串的第一个

下面是PHP代码,它读取目录和JSON文件,创建一个嵌套的数组结构,将其设置为JSON_encode()d并发送回JS

if ($langHandle = opendir($langDir)) {
while (false !== ($langEntry = readdir($langHandle))) {
    $currentLangDir = $langDir . "/" . $langEntry;
    if (is_dir($currentLangDir) && $langEntry != '.' && $langEntry != '..') {
        $currentLang = array();
        if ($currentLangHandle = opendir($currentLangDir)) {
            while (false !== ($catEntry = readdir($currentLangHandle))) {
                $currentCatFile = $currentLangDir . "/" . $catEntry;
                if(is_file($currentCatFile) && $catEntry != '.' && $catEntry != '..') {
                    $currentCat = file_get_contents($currentCatFile);
                    $currentLang[removeFileExtension($catEntry)] = $currentCat;
                }
            }
        }
        $langArray[$langEntry] = $currentLang;
    }
}

如何修复这些不需要的字符,快速搜索删除BOM字符表明这是一件坏事。

您在问题中粘贴的内容中可能没有显示不可打印的字符。我已将您的文本复制并粘贴到您提供的链接处的在线解析器中,它解析得很干净

尝试将原始文本复制和粘贴到中,并将其与从上面的SO问题复制和粘贴时得到的结果进行比较……如果它们不同,那么您将有一个关于伪字符位置的线索

这是我得到的输出的屏幕截图,解析得很清楚


兄弟,我也遇到了类似的问题,检查你的文件编码(UTF-8)和(UTF-8没有BOM)会有所不同。

“我遗漏了一些明显的东西吗?”不,JSON是有效的。如果你不显示代码,我们无法真正帮助你。通常是“无效令牌”错误也会告诉您令牌的起始位置。可能是在您的代码中试图解析它,您在字符串中添加了一些内容。您能分享一下吗?我在验证程序中运行它时没有错误。并且目视检查也显示没有问题。您的原始文本中是否可能存在无法打印的字符发布时是否进行了筛选?好的,您是正确的,那里有一个不可打印的字符,这可能是因为在解析字符串之前,我对字符串使用了一些replace()调用。我将向问题添加解析前的编辑。