2014-11-25 5 views
1

не уверен, что я делаю неправильно здесь, но у меня есть мои строки JSON, и я пытаюсь получить значения для вывода в IF заявлении
т.е. 63,52,55пытаются понять JSON Синтаксический с помощью PHP

вот мой код:

$jayjay = '{"items":{"cID":"63","qty":"2"},"items":{"cID":"52","qty":"1"},"items":{"cID":"55","qty":"1"}}'; 
echo $jayjay; 
$obj = json_decode($jayjay, TRUE); 
for($i=0; $i<=count($obj['items']); $i++) { 

    echo $obj['items'][$i]['cID']; 
    echo ","; 
}  

но вывод просто пустой и я не могу понять, почему

Любая помощь будет оценена.

Спасибо

+0

Часто случается, что это происходит из-за синтаксической ошибки в данных JSON. Проверьте результаты 'json_last_error'. Вероятно, это возвращает 'JSON_ERROR_SYNTAX' –

+7

Это не похоже, что и JSON. Это объект с повторным ключом 'items', поэтому я ожидаю, что результат не будет определен. Я думаю, вы ожидали, что значение ключа 'items' будет массивом, но это не так. В любом случае, это вызывает ошибки. http://codepad.viper-7.com/KIFqba * и * в вашем вопросе нет инструкции '' '' '' '' '' '' '' '' '' '' '' '' ' Поэтому ... исправить все это и вернуться :) – Hamish

+0

Заменить цикл 'foreach ($ obj ['items'] as & $ item) {echo $ item ['cID'], ',';} 'Он должен вывести' 55, '. –

ответ

2

Проблема заключается в том, что у вас есть ключ «пункты» несколько раз в вашем JSON, который является неправильным. Обратите внимание, что ключ JSON должен быть уникальным для хорошо сформированного JSON.

В принципе, нет ошибки, если вы используете более одного ключа с тем же именем, но в JSON используется последний ключ с тем же именем, который будет использоваться. В вашем случае, основные «элементы» было бы лучше, чтобы содержать массив объектов, как это значение:

{'items' : [{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"}, {"..." : "..."}]} 
+0

спасибо, ваш формат JSON был идеальным, и теперь я вижу свою ошибку. –

+0

Добро пожаловать :) – Goran

2

Как Хэмиш заявил в своем comment, вы не можете иметь JSON, как вы в комплект поставки. Клавиши (в этом случае items) переписывают друг друга до последнего ключа. То, что я предлагаю, если вы создаете массив так:

{"items":[{"cID":"63","qty":"2"}, {"cID":"52","qty":"1"},.....]} 

позволяет вам itterate, как вам требуется. Значение вы можете просто цикл, как вам требуется:

$items = json_decode($json, true); 
foreach($items as $thing){ 
    echo $thing['cID']; 
    echo ","; 
} 
+0

Ваш JSON по-прежнему недействителен. Вы открываете '[' дважды, но закрываете только один раз. –

+0

@ Исмаил Мигель Великий Пятно! Глупо опечатать это рано утром. Починил это. – Darren

+0

Не беспокойтесь, чувак, давайте притвориться, что мы его не видели, и этого не произошло. Все делают ошибки. –

0

Как уже указывалось, что ваши данные в формате JSON имеет неверный формат.

Но так как переполнение стека является довольно неэффективным методом синтаксиса, проверяющим ваши данные, я бы предложил использовать JSON linter (например, this one) по статическим данным JSON в будущем. Или, по крайней мере, проверку возвращаемого значения json_last_error после разбора для поиска потенциальных проблем, по крайней мере, при тестировании или отладке.

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