Перебирать строку JSON в PHP?

#javascript #php #arrays #json #iteration

Вопрос:

кажется, это действительно простой вопрос, но я немного затрудняюсь: я получаю строку JSON через JavaScript. Теперь я хотел бы повторить этот элемент. Полученная строка имеет следующий вид: {"title":value,"title2":value}

Как я могу повторить эту строку JSON, не зная ключа и значения? Я хотел бы получить этот результат:

заголовок -> значение

заголовок 2 -> значение 2

Я попробовал сделать это таким образом:

 $json = file_get_contents('php://input');
$array = json_decode($json,true);
$response = "Test";
foreach($array as $key=>$val) {
    $response = $response. "$key : $val";
}

echo json_encode($response);
 

Он возвращает только «Тест». Если я изменю его на echo json_encode($array), он вернет указанную строку JSON.

Комментарии:

1. подождите, вы используете php или javascript? Вы упомянули и то, и другое в своем вопросе. Я ответил на php, но это просто сделать и в js

2. JavaScript в качестве отправителя и php в качестве получателя.

3. Что вы пытались сделать, чтобы решить эту проблему? Где ты застрял? Вы пробовали сбросить $array , просто чтобы посмотреть, что в нем содержится?

Ответ №1:

Вы упомянули javascript и php в своем вопросе, поэтому я собираюсь ответить за оба. Вот JS, два разных способа. Я считаю, что foreach сейчас недооценивается в пользу конструкции (of), но я не работаю в основном в JS:

 var json = '{"title": 12, "title2": "text"}';
var data = JSON.parse(json);

Object.keys(data).forEach(function(key) {
  console.log(key   ' -> '   data[key])
})

for(key of Object.keys(data)) {
  console.log(key   ' -> '   data[key]);
} 

И для PHP:

Вы можете проанализировать строку json в массив с помощью json_decode:

 $json = '{"title": 12, "title2": "text"}';
$arr = json_decode($json, true);
foreach($arr as $key=>$val) {
    echo "$key : $val";
}
 

true анализирует его в массив вместо объекта std.

https://www.php.net/manual/en/function.json-decode.php

Комментарии:

1. Я добавил код, который использовал. К сожалению, он не входит в цикл. У вас есть какие-нибудь идеи, что может быть не так? Может быть, это ошибка из-за типа? JSON_decode возвращает строку.

2. код json_decode плох в одном смысле, потому что он завершится беззвучно. Вы можете вызвать функцию json_last_error (), чтобы получить последнюю ошибку и устранить неполадки. Я бы начал с проверки значения $json, чтобы убедиться, что это допустимый json. php.net/manual/en/function.json-last-error.php

3. json_decode возвращает строку, поэтому, похоже, она не работает.

4. Вы также можете проверить значение массива с помощью чего-то вроде echo «<предварительно>»; print_r($array); echo «<предварительно></предварительно>»; echo «</предварительно><предварительно>»; var_dump($json); echo «<предварительно></предварительно>»; выход;

5. Что возвращает json_decode? Показывает ли json_last_error ошибку? Что содержит массив$?

Ответ №2:

Из-за формата ответа вы должны декодировать декодированный формат, чтобы принять объект так, как вы хотите

 $json = '{"title": 12, "title2": "text"}';
$encoded=json_encode($json);
$decoded=json_decode($encoded);
$ddecode=json_decode($decoded);
foreach($ddecode as $key=>$val) {
    echo "$key -> $val";
}
 

Выход :

 title -> 12 title2 -> text