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



我正在制作一个firefox插件(SDK/Jetpack),我使用Simple-Prefs模块。我想在我的首选项中有一个数组,在我的包中。我把它写成

{
  [...]
  "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的错误,但这可能是我的错。

根据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时,它将"转义为",但JSON要求它仍然是"。通过转义和",在第一次解析它时,当处理整个文件时,它变成

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

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

如果你这样做,它会起作用吗

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

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

最新更新