Ошибка парсера JSON - PullRequest
       3

Ошибка парсера JSON

0 голосов
/ 01 июля 2010

Я использую парсер json из json.org для обработки данных из моего приложения. Проблема в том, что синтаксический анализатор не может обрабатывать некоторые форматы json.

Один запрос получает данные ниже.

  <?php

  $obj = array("cities"=>array("city1","city2","city3","city4","city5"));

  echo json_encode($obj);

  ?>

Результаты в JSON ниже

{
"cities": ["city1","city2","city3","city4","city5"] 
}

код ниже обрабатывает вышеуказанные данные

  var data = json_parse(XMLHttpRequestObject.responseText, function (key, value){

  alert(key +' = '+value);

  });

Синтаксический анализатор не работает и выдает ошибку.

Кто-нибудь знает, как обращаться с таким объектом.

Ответы [ 5 ]

3 голосов
/ 01 июля 2010

Я выполнил следующее для быстрого теста, и он, кажется, работает:

var text = '{ "cities": ["city1","city2","city3","city4","city5"] }';
var data = json_parse(text, function (key, value){
  document.write(key + ' = ' + value + '<br/>');
});
document.write('result = ' + data);

Он рекурсивно обходит структуру, и в результате получается:

0 = city1
1 = city2
2 = city3
3 = city4
4 = city5
cities = ,,,,
= [object Object]
result = undefined

Что находится в вашемXMLHttpRequestObject.responseText поле?

Кроме того, разве вы не должны возвращать значение из вашего function(key, value)?

1 голос
/ 01 июля 2010

Вы должны поместить свои ключи и значения в double цитаты:

{
"cities": ["city1","city2","city3","city4","city5"] 
}

Значением может быть строка в двойных кавычках, или число, или истина, или ложь, или ноль, или объект или массив. Эти структуры могут быть вложенными.

Вы можете использовать jsonlint для подтверждения кода.

0 голосов
/ 01 июля 2010

Кажется, проблема в алгоритме кодирования json вашего приложения.

Поскольку вы не указали язык приложения, я не могу сказать вам точную функцию / метод для использования, но я предлагаю вам использовать стандартныеМетоды кодирования json вместо этого изобретают велосипед.

Например, в php вы можете использовать стандартную функцию json_encode одной из многих библиотек кодирования в мире открытого исходного кода.

0 голосов
/ 01 июля 2010

Сбой синтаксического анализа, потому что данные JSON искажены.Перед city3 стоят две кавычки, а начальная кавычка для city4 отсутствует.

{
cities: ['city1','city2','city3','city4','city5'] 
}

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

Пример PHP:

$output = array(
  'cities' => array('city1', 'city2', 'city3', 'city4', 'city5')
);
echo json_encode($output);

Вывод:

{"cities":["city1","city2","city3","city4","city5"]}
0 голосов
/ 01 июля 2010

Держу пари, что проблема заключается в ваших данных. '' перед city3 неверно.

Будет полезно, если вы включите некоторую информацию о выданной ошибке.

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