Вот мой php-код с форматированной json-строкой:
<?php $string='{"items": [ { "address":"W 7th Ave" }, { "address":"W 8th St" } ]}'; $json = json_decode($string, true); foreach ($json as $key => $value){ echo "$key: $value\n"; }; ?>
Я хочу узнать, как разбирать / выводить строку json во что-то, что я могу показать в html или помещать в базу данных. Однако я застрял на чем-то, что очень просто, но я потратил большую часть утра, пытаясь понять.
Я хочу понять, почему результаты моего кода выше дают мне следующий результат:
"items: Array"
И не то, что я хочу / ожидаю получить:
"items: W 7th Ave" "items: W 8th St"
Что мне не хватает? Разве это не «Адрес» следующего «уровня» вниз от «Item» в массиве?
$string = file_get_contents('./string.json'); $json = json_decode($string);
если вы хотите иметь items: <address>
:
foreach ($json['items'] as $address) { echo "items:". $address['address'] ."\n"; };
в любом случае, если вы не уверены в том, как построен массив, вы можете распечатать его через:
print_r($json);
который будет печатать:
Array ( [items] => Array ( [0] => Array ( [address] => W 7th Ave ) [1] => Array ( [address] => W 8th St ) ) )
теперь вы узнали, что $json
содержит только массив ( items
) из двух массивов, а затем, если вы его зацикливаете, вы получите тот массив, который напечатан в вашем примере. Как объяснялось выше, вам нужно сделать один шаг глубже, зациклив элементы в массиве items
и напечатать их элемент address
.
вот полный сценарий: http://pastie.org/2275879
Ваши объекты находятся в массиве. Вы можете пропустить их так:
foreach ($json['items'] as $address) { echo 'Address: '.$address; }
BTW, я делал var_dump, print, print_r, переключал его назад и вперед из Object to Array, чтобы узнать больше о структуре массива и т. Д., А также сделал кучу вариантов эха, а также для циклов foreach и т. Д., Чтобы попытаться получить то, что я хотел от массива.
Хорошо, поэтому, чтобы обобщить, ответы, похоже, указывают, что я должен:
Я попробовал оба ответа и получил:
Используя ответ TaylorOtwell:
Я получил: Адрес: Array Адрес: Array
Тейлор
Используя ответ Далена:
Я получил: 0: Массив 1: Массив
Похоже, мне нужно каким-то образом пройти через массив во второй раз в течение первого foreach, чтобы получить фактические значения?
Будет ли это выглядеть примерно так?
foreach ($json['items'] as $key => $value) { foreach ($json['items']['address'] as $key => $value) { echo "$key: $value\n"; }; };
Сначала создайте класс для своих элементов.
function getAddress(address) { this.address=address; }
Нажимайте объекты в массив
newAddress = JSON.stringify(new getAddress(address)); AddressArray.push(newAddress);
Преобразуйте массив в массив JSON, используя
AllAddress=JSON.stringify(AddressArray);
Отправьте свой массив на элементы backend / fetch, например
$json_array = json_decode($AllAddress, true); for($i=0;$i<count($json_array);$i++) { $eachAddress = json_decode($json_array[$i],true); $address= $eachAddress["address"];//fetch particular element from your JSON Object }
* Используйте implode (php), чтобы сразу получить все элементы из массива.
Вы можете упростить вводную строку следующим образом
$string='{"address":["W 7th Ave","W 8th St"]}';
$json = json_decode($string, true);
echo'<pre>';
print_r($json);
echo'</pre>';
foreach ($json['address'] as $key=>$value){
echo "Address $key:". $value ."<br>";
};