#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.
Комментарии:
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