【问题标题】:Google Chrome JSON.encode / decode array谷歌浏览器 JSON.encode/decode 数组
【发布时间】:2011-11-30 16:30:22
【问题描述】:

所以,我正在编写一个小 Greasemonkey 用户脚本,它在 Firefox 中运行良好,但是如果我尝试在 Google 的 Chrome 上使用 Tampermonkey 运行它,我在编码/解码数组时会出现奇怪的错误。

我尝试让 Script 跨浏览器兼容,所以我必须编写一个函数来决定使用哪些 JSON 方法

function jsonEncode(string) { 
  try {
    return JSON.stringify(string); 
  } catch (e) {
    return JSON.encode(string); 
  }
}

function jsonDecode(obj) {
  try { 
    return JSON.parse(obj); 
  } catch (e) { 
    return JSON.decode(obj);
  }
}

为了简化事情,我现在将代码简化为一个简单的数组,并尝试编码/解码和迭代

var array = ['string1', 'string2'];

var encoded = jsonEncode(array);
localStorage.setItem('json_test', encoded);

var decoded = jsonDecode(localStorage.getItem('json_test'));
for(var i = 0; i < decoded.length; i++) {
    console.log(decoded[i]); 
}

我希望输出是

string1
string2

chrome 给了我这个

[
"
s
t
r
i
n
g
1
"
,
"
s
t
r
i
n
g
2
"
]

有没有人知道如何解决这个问题,或者为什么 chrome 会这样做?

编辑 1: Chrome 版本 15.0.874.121 m

编辑 2: 还没有弄明白,但是当我用对象而不是数组尝试它时,它可以工作,所以我现在就这样做,感谢您的时间和帮助!

【问题讨论】:

  • I can't reproduce the problem. 你能尝试在jsfiddle.net 上复制它吗?另外,什么版本的 Chrome 和什么操作系统?
  • Chrome 版本是 15.0.874.121 m 将尝试用 Fiddle 重现它..
  • 好的,所以如果我在 jsfiddle.net 上发布代码似乎可以工作......这引发了一个问题,为什么它不能在 tampermonkey 中工作......
  • @grrrrr 我想问只是为了学习它。 JSON.stringify 是否与浏览器不兼容,为什么需要使用JSON.encode
  • 起初我只是使用了 JSON.stringify,它在 Firefox 中运行良好,只要我在 Chrome/Opera 中尝试过,我就遇到了错误,显然这两个不知道 stringify,所以我搜索了 stringify 替代品这是编码,并且通过 try and catch 它现在可以跨浏览器工作。

标签: javascript json google-chrome userscripts tampermonkey


【解决方案1】:

在 Chrome 中打开 JS 控制台 - 这让您可以在循环中设置断点 - 并在变量上添加监视。

除了 jsonDecode 不解码 - 还有括号...

问题在于您按原样解码为字符串 - 这就是为什么它以字母分割字符串的原因 - 就像您对其进行编码一样。

JSON 普通表示数组...也许检查文档以获取正确的输出参数。

【讨论】:

  • ... 或者可能 localStorage.setItem() 不支持数组?为什么不直接在 RAM 中尝试一个数组呢?
  • 据我所知 localStorage 只支持字符串,这就是为什么我运行我想通过 JSON 保存到 localStorage 的所有内容
  • JSON 基本上是一个字符串——它以纯文本形式表示一个 JS 对象——因此得名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2012-12-22
  • 2011-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多