2016-10-25 2 views
-1

Я пытаюсь вернуться JSON ответ в правильном формате, но я получаю дополнительный «запятая» в возвращенном коде (запятая после последнего пункта «Карандаш»):PHP и JSON - дополнительная запятая в результатах

{ 
     "results": [{ 
      "ItemID": 1, 
      "ItemName": "Ball" 
     }, { 
      "ItemID": 2, 
      "ItemName": "Pen" 
     }, { 
      "ItemID": 3, 
      "ItemName": "Pencil" 
     }, 
     }] 
    } 

Я пробовал разные вещи, но я не могу избавиться от него. Кто-нибудь знает, как его удалить?

Код, который у меня есть это:

<?php 

print '{"results":['; 
for ($i=0; $i <$numrows; $i++) { 
    $stmt->fetch(); 

    $JSONArray = array(
     "ItemID" => $ItemID, 
     "ItemName" => $ItemName 
    ); 
    print ","; 

print json_encode($JSONArray); 


} 

print "]}" 

    ?> 

ответ

4

Вы делаете это совершенно неправильно. Вы выводите несколько независимых строк JSON, что совершенно неправильно. JSON - монолитная «структура», а построение ее по кусочкам очень рискованно.

Простой: не делайте этого.

Вы строите стандартный PHP массив, а затем сделать одну-единственную кодировку, когда вы полностью сделали здание:

$arr = array(); 

for(...) { 
    $arr[] = ... add stuff .. 
} 

echo json_encode($arr); 
0

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

$result = $stmt->get_result(); 
while($rows['results'][] = $result->fetch_array(MYSQLI_ASSOC)){} 
echo json_encode($rows); 

Если ваша система поддерживает его, просто использовать это вместо петли while:

$rows['results'] = $result->fetch_all(MYSQLI_ASSOC); 
Смежные вопросы