Spędziłem kilka godzin przeglądając kilka podobnych odpowiedzi przed opublikowaniem mojego problemu.PHP: nie można kodować json z wieloma wierszami
Pobieram dane z tabeli w mojej bazie danych i chcę je zakodować w JSON. Jednak wynik polecenia json_encode() jest poprawny tylko wtedy, gdy tabela ma jeden pojedynczy wiersz. Jeśli istnieje więcej niż jeden wiersz, test pod numerem http://jsonlint.com/ zwraca błąd.
To moje zapytanie:
$result = mysql_query($query);
$rows = array();
//retrieve and print every record
while($r = mysql_fetch_assoc($result)){
$rows['data'] = $r;
//echo result as json
echo json_encode($rows);
}
że dostaje mi następujący JSON:
{
"data":
{
"entry_id":"2",
"entry_type":"Information Relevant to the Subject",
"entry":"This is my second entry."
}
}
{
"data":{
"entry_id":"1",
"entry_type":"My Opinion About What Happened",
"entry":"This is my first entry."
}
}
Kiedy wykonać test na http://jsonlint.com/, zwraca błąd:
Parse error on line 29:
..."No comment" }}{ "data": {
---------------------^
Expecting 'EOF', '}', ',', ']'
Jeśli jednak używam tylko tej pierwszej połowy JSON ...
{
"data":
{
"entry_id":"2",
"entry_type":"Information Relevant to the Subject",
"entry":"This is my second entry."
}
}
... czy mogę przetestować tylko drugą połowę ...
{
"data":{
"entry_id":"1",
"entry_type":"My Opinion About What Happened",
"entry":"This is my first entry."
}
}
... ten sam test powróci "valid" JSON.
To, czego chcę, to móc wydrukować w jednym pojedynczym [poprawnym] JSON w każdym wierszu w tabeli.
Wszelkie sugestie będą bardzo mile widziane.
Dziękuję bardzo! Wszystkie rozwiązania działają, a Twoja zawiera najbardziej wyczerpujące wyjaśnienie. Nie tylko to jest poprawne, ale całkowicie przeoczyłem inne przykłady, aby umieścić funkcję json_encode poza pętlą while. Przepraszam, że nie zauważyłem i dziękuję za poświęcony czas. – asraelarcangel