2014-02-04 6 views
2

я следующий ответ JSON из PHP файлаJSON закодировать запятая неудачу

{ 
    "id":"85", 
    "title":"Hello, 
    hello I said", 
    "tags":null, 
} 

правильный выход в поле «Название» должно быть: «Название»: «Привет, привет, я сказал», бла-бла-бла ,

Обратите внимание, что запятая после Hello.

Я использую json_encode(), но я все еще получаю вышеупомянутый результат (который разбивает json).

вот мой PHP код:

$query = mysql_query("SELECT * from songs"); 
$rows = array(); 
while($r = mysql_fetch_assoc($query)) { 
$rows[] = $r; 
} 

$songArray = array(
    "songs" => $rows 
); 

$jsonD = json_encode($songArray); 

Если я не включать запятые в моем входе все работает нормально.

Код должен работать, в нем нет ничего особенного.

Есть ли у кого-нибудь идеи, почему это происходит? Как я могу быть исправлен. спасибо

+1

Код PHP, который вы предоставили здесь, не должен выводить этот JSON. Фактический код JSON должен быть чем-то вроде '{" songs ": [...]}', вы уверены, что это код, который вы используете? – Okonomiyaki3000

+0

Вы правы, он выводит то, что вы сказали. Я написал часть json. – user2062455

+0

Вопрос недействителен тогда? Должно ли быть удалено? –

ответ

2

{ "id":"85", "title":"Hello, hello I said", "tags":null, }

недействителен JSON. Вы должны удалить запятую после null,

{ "id":"85", "title":"Hello, hello I said", "tags":null }

+0

Он не писал это вручную ... ясно сказано, что это результат 'json_encode'. – Okonomiyaki3000

+2

@ Okonomiyaki3000 Это не может быть выход json_encode, даже если исходный массив содержит некорректную запятую. json_encode был разработан для вывода допустимого json. demo: http://codepad.org/uVyH9aEh – DhruvPathak

+0

Странно, но это часть выхода json_encode. для меня это тоже не имеет смысла. – user2062455

2

Вы должны удалить лишние , после "tags":null, - большинство браузеров будут принимать этот JSON, но я считаю, некоторые версии IE будут блевать на этом.

Основная проблема у Вас может быть это выглядит как у вас есть разрыв строки в:

"title":"Hello, 
hello I said", 

Если это истинный разрыв строки, то Javascript будет (например, символ 13 или символ 10). не быть счастливым (unterminated string literal). Исправление состоит в том, чтобы использовать функции замены строки PHP для замены любых вхождений символов 13 или 10 с заменяющим символом, возможно, просто пробелом. Ниже приведен пример использования preg_replace():

Remove new lines from string

+0

нет разрывов строк. У меня есть другие разрывы строк в текстовом поле, которое работает нормально. это единственная проблема с запятой. – user2062455

+0

Похоже, вам может потребоваться просто проверить на случай конечной запятой после того, как вы выполните json_encode и вручную удалите его в PHP. Не идеально. Подробнее о концевой запятой: http://stackoverflow.com/questions/201782/can-you-use-a-trailing-comma-in-a-json-object –

0

быстрое решение вашей проблемы будет использовать RTRIM как в следующем.

$json = rtrim(json_encode($songArray), ',}') . '}'; 

и если у вашего Json есть разрыв строки перед закрывающей скобкой, используя следующее, это исправит.

$json = rtrim(json_encode($songArray), ",\n}") . "\n}"; 

или вы можете использовать замену preg, как показано ниже.

$json = preg_replace("/,}/", '}', json_encode($songArray)); 
+0

Теперь вы добавили проблему не закрытие открытия '{' – dave

+0

Я пробовал это, с различными конфигурациями без везения. Кстати, я использую Ampps с php 5.3. Я также пробовал другие версии php без везения. – user2062455

+0

где-нибудь я использую запятую, json breaks. любые другие мысли. – user2062455

0

Пропустите JSON в

{ 
"id": "85", 
"title": "Hello,hello I said", 
"tags": "" 
} 

Я проверить JSON в онлайн JSon валидатор были две ошибки первая была третья строка вашего JSON, это кулачок, потому что вы кладете ввести после того, как «Привет». вторая из-за нулевого значения, которое вы указали в четвертом, вы можете использовать ссылку ниже для проверки json.

http://jsonlint.com/

0

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

спасибо всем за ваше время и ввод.

+0

Для любых других, кто сталкивается с этим с помощью пользовательских функций: вам нужно убедиться, что в цикле есть счетчик + total и пункт, чтобы удалить запятую на последней итерации глубины. Т.е., '($ total_rows> $ iteration)? ',': '' ' – dhaupin

Смежные вопросы