2015-04-20 2 views
0

Я не повезло с инструкциями из 7076525. Я добавил мой [], но по какой-то причине он помещает их только в каждую третью строку? У меня возникли проблемы с выяснением, какой синтаксис включить в мой код, чтобы сделать эту работу.JSON Encode Неправильный синтаксис

// output data of each row 
    while($row = $result->fetch_assoc()) { 

    $rows[] = $row; 
    //Add the header... 
    header('Content-Type: application/json'); 
     echo json_encode($rows); 
    } 
} else { 
    echo "0 results"; 
} 

Вот что выглядит мои данные JSON, как в настоящее время:

[ 
    { 
     "ticket_id": "66", 
     "number": "000005", 
     "user_id": "109", 
     "user_email_id": "0", 
     "status_id": "3", 
     "dept_id": "1", 
     "sla_id": "1", 
     "topic_id": "36", 
     "staff_id": "1", 
     "team_id": "0", 
     "email_id": "0", 
     "flags": "0", 
     "ip_address": "10.18.1.195", 
     "source": "Phone", 
     "isoverdue": "0", 
     "isanswered": "1", 
     "duedate": null, 
     "reopened": null, 
     "closed": "2015-04-20 07:16:46", 
     "lastmessage": "2015-04-20 07:16:46", 
     "lastresponse": "2015-04-20 07:16:46", 
     "created": "2015-04-20 07:16:46", 
     "updated": "2015-04-20 07:16:46" 
    } 
][ 
    { 
     "ticket_id": "66", 
     "number": "000005", 
     "user_id": "109", 
     "user_email_id": "0", 
     "status_id": "3", 
     "dept_id": "1", 
     "sla_id": "1", 
     "topic_id": "36", 
     "staff_id": "1", 
     "team_id": "0", 
     "email_id": "0", 
     "flags": "0", 
     "ip_address": "10.18.1.195", 
     "source": "Phone", 
     "isoverdue": "0", 
     "isanswered": "1", 
     "duedate": null, 
     "reopened": null, 
     "closed": "2015-04-20 07:16:46", 
     "lastmessage": "2015-04-20 07:16:46", 
     "lastresponse": "2015-04-20 07:16:46", 
     "created": "2015-04-20 07:16:46", 
     "updated": "2015-04-20 07:16:46" 
    }, 
    { 
     "ticket_id": "67", 
     "number": "000006", 
     "user_id": "129", 
     "user_email_id": "0", 
     "status_id": "3", 
     "dept_id": "1", 
     "sla_id": "1", 
     "topic_id": "36", 
     "staff_id": "1", 
     "team_id": "0", 
     "email_id": "0", 
     "flags": "0", 
     "ip_address": "10.18.1.121", 
     "source": "Other", 
     "isoverdue": "0", 
     "isanswered": "1", 
     "duedate": null, 
     "reopened": "2015-04-20 07:25:42", 
     "closed": "2015-04-20 07:25:54", 
     "lastmessage": "2015-04-20 07:18:33", 
     "lastresponse": "2015-04-20 07:25:54", 
     "created": "2015-04-20 07:18:33", 
     "updated": "2015-04-20 07:25:54" 
    } 
][ 
    { 
     "ticket_id": "66", 
     "number": "000005", 
     "user_id": "109", 
     "user_email_id": "0", 
     "status_id": "3", 
     "dept_id": "1", 
     "sla_id": "1", 
     "topic_id": "36", 
     "staff_id": "1", 
     "team_id": "0", 
     "email_id": "0", 
     "flags": "0", 
     "ip_address": "10.18.1.195", 
     "source": "Phone", 
     "isoverdue": "0", 
     "isanswered": "1", 
     "duedate": null, 
     "reopened": null, 
     "closed": "2015-04-20 07:16:46", 
     "lastmessage": "2015-04-20 07:16:46", 
     "lastresponse": "2015-04-20 07:16:46", 
     "created": "2015-04-20 07:16:46", 
     "updated": "2015-04-20 07:16:46" 
    }, 
    { 
     "ticket_id": "67", 
     "number": "000006", 
     "user_id": "129", 
     "user_email_id": "0", 
     "status_id": "3", 
     "dept_id": "1", 
     "sla_id": "1", 
     "topic_id": "36", 
     "staff_id": "1", 
     "team_id": "0", 
     "email_id": "0", 
     "flags": "0", 
     "ip_address": "10.18.1.121", 
     "source": "Other", 
     "isoverdue": "0", 
     "isanswered": "1", 
     "duedate": null, 
     "reopened": "2015-04-20 07:25:42", 
     "closed": "2015-04-20 07:25:54", 
     "lastmessage": "2015-04-20 07:18:33", 
     "lastresponse": "2015-04-20 07:25:54", 
     "created": "2015-04-20 07:18:33", 
     "updated": "2015-04-20 07:25:54" 
    }, 

ответ

3

Вы выполняете кодировку INSIDE в цикле. Это должно быть сделано после цикла:

while(...) { 
    build array 
} 
echo json_encode($array); 

Как она стоит сейчас, вы выводите несколько отдельных строк, например JSon

{"foo":"bar"}{"baz":"qux"} 

, который является синтаксически незаконным JSON. Если вы сделаете кодировку ПОСЛЕ цикла, вы получите

[{"foo":"bar"},{"baz":"qux"}] 

, который является законным.

И, кроме того, вы должны выводить header() на каждый цикл, итерации, вызывая тонну предупреждающих сообщений «заголовки уже отправлены», что дополнительно добавляет к повреждению.

Ответ json должен содержать одну синтаксически действующую строку json и ничего больше.

+0

Работал как чемпион. Это имеет смысл сейчас, спасибо за концепцию! –

1

Вы должны поставить кодировку JSON за пределами время цикла:

while($row = $result->fetch_assoc()) { 
    $rows[] = $row; 
} 

//Add the header... 
header('Content-Type: application/json'); 
echo json_encode($rows); 

В противном случае, вы просто конкатенации множественным JSON, что приводит к недействительному JSON в целом.