Почему я получаю дополнительный элемент в конце в JSON? - PullRequest
2 голосов
/ 24 сентября 2011

Я работаю на каком-то сайте и использую JSON.Моя проблема заключается в методе JSON.parse, я использую его для отправки простого массива и добавления к массиву значений.И я всегда получаю дополнительный элемент в конце, что мы просто запятые.вот упрощенный код:

responseText = '["dummy1", "dummy2", "dummy3", "dummy4"]';
var  clientList=[];
try {
    JSON.parse(responseText, function(key, val){clientList.push(val)});
} catch (e) {
    alert('no');
}

alert(clientList.length);

Во-первых, в IE он вообще не работает (исключение выдается).

Во-вторых, в результате chronlist представляет собой массив из 5 строк, апоследний - «,,,».

Почему это дополнительная ценность?Могу ли я избавиться от него (не вставляя массив в конец)?А что не так с IE?

Ответы [ 2 ]

4 голосов
/ 24 сентября 2011

Это будет работать:

responseText = '["dummy1", "dummy2", "dummy3", "dummy4"]';
var  clientList=[];
try {
    clientList = JSON.parse(responseText);
} catch (e) {
    alert('no');
}

IE не имеет JSON по умолчанию в браузере. Вам нужна библиотека, такая как json2.

Что касается вашего вопроса, эта функция обратного вызова действительно для того, чтобы преобразовать ваш объект, а не построить его. Например:

var transformed =
JSON.parse('{"p": 5}', function(k, v) { if (k === "") return v; return v * 2; });
// transformed is { p: 10 }

С Разбор

0 голосов
/ 24 сентября 2011

Существуют различия в использовании JSON в разных браузерах. Один из способов - сделать то, что сказал IAbstractDownvoteFactory. Другой способ - использовать библиотеку jQuery и

clientList = $.parseJSON(responseText);

должен выполнять работу под любым браузером (хотя я не тестировал его под IE).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...