代码之家  ›  专栏  ›  技术社区  ›  Daan

JSON。parse在JSON数据的第1行开始处抛出意外的字符错误

  •  0
  • Daan  · 技术社区  · 8 年前

    我对整个JavaScript环境还比较陌生,需要帮助将JSON文件解析为JSON对象以读取文件内容。我已经阅读了很多其他问题和文件,但到目前为止,我还没有看到任何与我的问题相关的东西。

    首先是情况:我有一个名为test的文件。json,应该从服务器交付。但出于测试目的,它存储在本地作为 clusters.json ,与我的html文档位于同一文件夹中。HTML文件的代码:

    <!DOCTYPE html>
    <meta charset="utf-8">
    <html>
    <head>
        <title>JSON THINGIE</title>
    </head>
    <body>
        <h1>A Header</h1>
        <p id="textone">sample text</p>
        <script>
            var jsonFile = "/clusters.json";
            var jsonObj = JSON.parse(jsonFile);
        </script>
    </body>
    </html>
    

    JSON.parse(jsonTest); ,然后抛出此错误(来自mozilla调试工具):

    语法错误:JSON。解析:JSON数据第1行第1列的意外字符

    JSON文件(clusters.JSON)

    {
        "occupation":{
          "employment":[
             {
                "id":1,
                "cluster_name":"Tekenaar",
                "weight":0.5,
                "similarity":0.1,
             },
             {
                "id":4,
                "cluster_name":"Tekenaar Constructeur",
                "weight":0.6,
             }
          ],
          "education":[
             {
                "id":2,
                "cluster_name":"HBO",
                "weight":1,
             },
             {
                "id":3,
                "cluster_name":"HBO",
                "weight":1,
             }
          ]
       }
    }
    

    表面上 { [ .

    我用多个验证器工具检查了我的JSON,甚至使用了来自 JSON Example 但是所有的错误都是一样的。

    this JSON.stringify(jsonTest) 首先,但没有用。

    我可能做错了什么?感谢您的帮助,因为我已经在这个错误上花费了太多时间。谢谢

    我认为使用字符串会使解析器自动加载文件,这确实是我自己的错误。

    无服务器修复: this question . 当我在寻找如何使用 file:// .

    fix的实施供将来参考:

    // URL to the file
    var jsonFile = 'file:///C://Users//Daan//Projects//Temp Name//clusters.json'
    
    function readTextFile(file) {
        var rawFile = new XMLHttpRequest();
        rawFile.open("GET", file, false);
        rawFile.onreadystatechange = function () {
            if (rawFile.readyState === 4) {
                if (rawFile.status === 200 || rawFile.status == 0) {
                    var allText = rawFile.responseText;
                    // Show alert with the read text.
                    alert(allText);
                }
            }
        }
        rawFile.send(null);
    }
    
    readTextFile(jsonFile);
    
    3 回复  |  直到 8 年前
        1
  •  1
  •   Thijs    8 年前

    var jsonFile = "/clusters.json"; 不加载文件,它只是创建一个字符串。下一行尝试将字符串解析为JSON对象,但事实并非如此。在试图解析文件内容之前,您必须以某种方式加载该文件。

    如果您还没有Web服务器,您可能需要一个Web服务器来运行您的网站,并使用AJAX加载文件。

        2
  •  0
  •   TheBilTheory    8 年前

    JSON.parse(xxx)

    您可以删除 var jsonObj = JSON.parse(jsonFile);

    只需使用 jsonFile 在您的代码中。

        3
  •  0
  •   DividedSky    8 年前

    从您的代码来看,您似乎在尝试给出JSON。parse()将文件名作为参数。JSON。parse()接受字符串。您必须掌握文件内容,然后将其传递给JSON。parse()。 This answer

    JSON.parse() documentation