Google Chrome JSON.encode / decode array - PullRequest
       7

Google Chrome JSON.encode / decode array

0 голосов
/ 30 ноября 2011

Итак, я пишу небольшой пользовательский скрипт Greasemonkey и он отлично работает в Firefox, однако, если я пытаюсь запустить его с Tampermonkey в Googles Chrome, я получаю странные ошибки при кодировании / декодировании массивов.

Я пытаюсь сделать кросс-браузер 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

вместо хрома мне это дает

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

Кто-нибудь знает, как решить эту проблему, или почему Chrome делает это?

РЕДАКТ. 1: Версия Chrome 15.0.874.121 м

РЕДАКТИРОВАТЬ 2: до сих пор не понял, но когда я пробую это с объектом вместо массива, это работает, так что я сделаю это сейчас, спасибо за ваше время и помощь!

1 Ответ

0 голосов
/ 30 ноября 2011

Откройте консоль JS в Chrome - это позволит вам установить точки останова в цикле - и добавить отслеживание переменных.

Кроме того, что jsonDecode не декодирует - все еще есть скобки ...

Проблема в том, что вы декодируете в строку, как кажется, - поэтому она разбивает строку буквами - так же, как вы ее кодировали.

JSON обычный представляет массивы ... возможно, проверьте документацию на правильность выходных параметров.

...