当在package.json中转义JSON时,运行firefox插件失败并出现语法错误

时间:2014-03-10 22:38:56

标签: json firefox-addon-sdk

我正在制作一个firefox插件(SDK / Jetpack),并且正在使用Simple-Prefs模块。我希望在我的一个首选项中有一个数组,所以在我的package.json中我把它写成

{
  [...]
  "preferences":[
  [...]
  {
    "name":"audio-priority",
    "title":"Audio Priority",
    "type":"string",
    "value":"[\"audio-notifications\",\"audio-error\",\"audio-messages\",\"audio-youtube\",\"audio-twitch\"]",
    "hidden":true
  },
  [...]
}

但是当我运行它时,它会构建并且浏览器会打开,但是在控制台中它会出现

console.error: ltt-notifier: 
  Message: SyntaxError: missing ) after argument list
  Stack:
    evaluate@resource://gre/modules/XPIProvider.jsm -> jar:file:///tmp/tmpn5QUOo.mozrunner/extensions/jid1-23jjnBCWPFQ3ag@jetpack.xpi!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js:223
setDefaultPrefs@resource://gre/modules/XPIProvider.jsm -> jar:file:///tmp/tmpn5QUOo.mozrunner/extensions/jid1-23jjnBCWPFQ3ag@jetpack.xpi!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/addon/runner.js:66

然后整个加载更多的东西(堆栈),并且插件没有运行。 如果我将数组更改为没有\“(或任何转义字符 - 我尝试使用\ u0022)的任何内容,它工作正常,这让我觉得它可能是一个Mozilla Bug,但它可能是我的错

2 个答案:

答案 0 :(得分:1)

基于来自https://bugzilla.mozilla.org/show_bug.cgi?id=501156的链接(链接到https://groups.yahoo.com/neo/groups/json/conversations/topics/1286),我发现答案是它应该是

"[\\\"audio-notifications\\\",\\\"audio-error\\\",\\\"audio-messages\\\",\\\"audio-youtube\\\",\\\"audio-twitch\\\"]",

因为第一次对JSON进行解码时它会对“to”进行转换,但是JSON要求它仍然是\“。通过转义\以及”,第一次解析它时,整个文件得到处理,它变成

[\"audio-notifications\",\"audio-error\",\"audio-messages\",\"audio-youtube\",\"audio-twitch\"]

不再关闭引号(我认为这是一个问题,因为错误与本机代码中的evaluate命令有关),并且意味着它在解码时仍然是有效的JSON。

答案 1 :(得分:0)

如果你这样做是否有用

'["audio-notifications","audio-error","audio-messages","audio-youtube","audio-twitch"]'

"['audio-notifications','audio-error','audio-messages','audio-youtube','audio-twitch']"

如果是,您应该file a bug