【问题标题】:parsing json using JSON.parse() throws error使用 JSON.parse() 解析 json 会引发错误
【发布时间】:2014-10-21 23:23:46
【问题描述】:

我有从 decodeURIComponent() 函数解码的大 json 字符串。现在我正在尝试使用 JSON.parse() 函数将此字符串解析为 Json 对象。当我运行时,它显示“意外的语法标记 m”。我这里有两个疑问 1.有没有更好的工具来获得语法更正,因为它是一个大字符串。 2. 当我在这个 url "http://jsonviewer.stack.hu" 中给出相同的 json 字符串进行验证时,我得到了有效的 json 对象.. 这怎么可能。

我在第 2 点得到的有效 json 对象是我在程序中需要的。请给我一些关于如何解决这个问题的建议。

这是我的 json 字符串:https://drive.google.com/file/d/0Bz0478Hh7tBqS0pXUTBMTVFPZzA/view?usp=sharing

【问题讨论】:

  • 那不是json,那是javascript变量赋值语句。

标签: javascript json parsing


【解决方案1】:

它抱怨的“m”是第一个字符。您需要删除开头的 mandrill_events= 部分才能使其成为有效的 JSON。

【讨论】:

    【解决方案2】:

    我个人使用 npm 包 jsonlint 来验证大型 JSON 文件。

    npm install -g jsonlint
    

    使用很简单,它会准确地告诉您 JSON 违规存在的位置。

    Usage: jsonlint [file] [options]
    
    file     file to parse; otherwise uses stdin
    
    Options:
       -v, --version            print version and exit
       -s, --sort-keys          sort object keys
       -i, --in-place           overwrite the file
       -t CHAR, --indent CHAR   character(s) to use for indentation  [  ]
       -c, --compact            compact error display
       -V, --validate           a JSON schema to use for validation
       -e, --environment        which specification of JSON Schema the validation
                                file uses  [json-schema-draft-03]
       -q, --quiet              do not print the parsed json to STDOUT  [false]
       -p, --pretty-print       force pretty printing even if invalid
    

    【讨论】:

    • 或者只是 jsonlint.com 我想如果你懒得安装 node 和 npm
    • 当然,当您有互联网连接时,它也可以工作。不过,命令行工具很适合放在您的工具箱中,因为它可以对 JSON 内容进行各种转换。不过,我非常喜欢在命令行上工作。
    【解决方案3】:

    开头的mandrill_events= 是破坏JSON.parse(...) 的原因。删除它。

    【讨论】:

      【解决方案4】:

      回答您关于该工具的问题,我喜欢这个。

      http://www.jsoneditoronline.org/

      只需粘贴 JSON 并按向右箭头即可。我双向工作,您也可以在右侧编辑 JSON。

      如果您的 JSON 对象有问题,它会告诉您确切的位置。它在后台使用 jsonlint。

      在您的情况下,问题可能是其他答案所说的初始变量分配,因为那不是有效的 JSON。你需要删除它,只留下数组。 JSON Editor Online 抛出此错误,更具描述性。

      Error: Parse error on line 1:
      mandrill_events=[{"e
      ^
      Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'
      

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2013-02-16
        • 2017-11-26
        • 1970-01-01
        • 1970-01-01
        • 2015-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        相关资源
        最近更新 更多