清单是无效的JSON。行:1,列:1,意外的令牌

时间:2015-11-17 13:20:33

标签: json google-chrome-extension

不断收到此错误:   “清单是无效的JSON。行:1,列:1,意外的令牌。” 我不明白我的代码是什么问题?这是我到目前为止所做的:

{
    "manifest_version": 2,
    "name": "extension",
    "version": "1.0",
    "description": "My first Chrome extension.",
    "browser_action": {
        "default_icon": "icon.jpg",
        "popup": "popup.html"
    }
}

10 个答案:

答案 0 :(得分:8)

我在Visual Studio 2010中使用Build Action:None设置了manifest.json文件属性。

在Visual Studio中更改为“内容”可确保在部署时传输文件。

enter image description here

也许你的问题类似。

修改

鉴于我的downvote,我认为我应该扩展并说我的观点是,鉴于在第1行,第1列有有效的json,你更有可能获得404 http响应而不是返回的实际json文件

所以也许文件不在正确的位置或服务器没有权限或其他什么,但上面是我的错误。不可否认,它可能对我的错误而言过于具体,而不是你的错误。

但是一般的观点仍然存在,更可能是因为Web服务器返回json文件的http响应,检查浏览器中网络日志中的响应。

答案 1 :(得分:4)

您的 browser_action 键似乎使用了错误的值。要指定弹出式模板,您必须使用 default_popup 。 它应该是:

{
  "manifest_version": 2,
  "name": "extension",
  "version": "1.0",
  "description": "My first Chrome extension.",
  "browser_action": {
      "default_icon": "icon.jpg",
      "default_popup": "popup.html"
  }
}

答案 2 :(得分:4)

内容类型

在“网络”选项卡中检查manifest.json的Content-Type。这必须是 application / json 而不是 text / html

如果内容类型错误,则可能需要配置Web服务器的设置以正确提供 json 文件。

就我而言,我必须将其添加到nginx 启用站点的文件中:

  

位置〜*。(jpg | jpeg | gif | png | css | js | ico | xml | svg | json )$

答案 3 :(得分:2)

我知道这是一个老问题,但是如果上面接受的答案对某人不起作用,请务必检查manifest.json的拼写和路径是否正确。我以前从一个简单的拼写错误中得到了同样的错误。简单的错误,但它发生了!

答案 4 :(得分:2)

在我的特定情况下,我在manifest.json中添加了此内容:

"storage": {
   "managed_schema": "storage.json"
}

但是我的storage.json是空的。我必须使用以下内容编辑我的storage.json文件:

{
   "$schema": "http://json-schema.org/draft-03/schema#",
   "type": "object",
   "properties": {
      "adminSettings": {
         "title": "A valid JSON string compliant with backup format.",
         "description": "All entries present will overwrite local settings.",
         "type": "string"
      }
   }
}

但是,总的来说,这是我收到第1行第1列意外令牌误导性错误时的建议,该错误基本上转换为: JSON的一个或多个部分中有错误,可能有或无事可做该文件中包含语法

  1. 将最常见,最简单的字符串内容移动到manifest.json文件的顶部,例如manifest_versionnamedescription等。
  2. 将最复杂的数组内容放到底部,从您最怀疑的问题开始。
  3. 将文件另存为UTF-8。
  4. 然后,通过在线验证器运行它。
  5. 从那里,如果仍然遇到问题,请使用另一个记事本,将JSON底部的内容剪切/粘贴到另一个文本文件中,然后尝试再次上传JSON。 (请注意,您可能会收到一个以逗号结尾没有以下项目的JSON块的错误。因此,当您收到错误消息时,请不要忘记撤消该操作。)
  6. 无论如何,重复步骤4直到最后Line 1 Col 1错误消失。到那时,您已经知道需要处理的问题部分。
  7. 将其他所有内容粘贴回manifest.json中。这就是我发现我的storage块是问题所在的方式。我查看了另一个Chrome扩展程序,看看它们是如何工作的,并意识到了我的错误。

答案 5 :(得分:1)

当清单为空或根本没有清单时,也会发生此错误。如果您使用一些框架,例如。角度来看,只需检查您的生产版本中是否有清单即可。如果不是,请在您的angular.json / angular-cli.json中将“ manifest.json”添加到资产数组。

示例: "assets": ["assets", "favicon.ico", "manifest.json"]

答案 6 :(得分:0)

这已经过时了,但我遇到了同样的问题,发现我没有在我的脚本中使用标准双引号<uses-permission>,我从official Google Doc

复制并粘贴了

答案 7 :(得分:0)

请尝试将manifest.json文件另存为UTF8格式。

答案 8 :(得分:0)

由于扩展名(MIME类型),浏览器找不到清单。在Chrome DevTools>网络>标头>内容类型中,清单的内容类型必须与实际的清单文件扩展名(.json.webmanifest)匹配。要解决404错误,您需要在web.config中声明文件类型:

<staticContent>
  <mimeMap fileExtension=".json" mimeType="application/json" />
  <mimeMap fileExtension=".webmanifest" mimeType="application/manifest+json" />
</staticContent>

答案 9 :(得分:0)

我添加了crossorigin属性。

<link rel="manifest" crossorigin="use-credentials" href="%PUBLIC_URL%/manifest.json" />