#php #json
#php #json
Вопрос:
Я не смог вставить данные json в свою функцию PHP.У меня есть данные json ниже в файле posts.json:
НЕТ: a1, a11 и т. Д. Являются Только образцом, Поэтому, пожалуйста, не предлагайте его логику
{
"posts": [
{
"post_name": "a1",
"post_title": "a11",
"_is_location": "a111",
"_hook": "a1111"
},
{
"post_name": "a2",
"post_title": "a22",
"_is_location": "a222",
"_hook": "a2222"
}
]
}
Ниже приведен фрагмент кода PHP:
$jsonDecode = json_decode(__DIR__ . '/posts.json', true);
foreach($jsonDecode['posts'] as $post_json) {
//create a variable to specify the details of page
$post = array(
'post_name' => $post_json['post_name'],
'post_content' => 'This is a example content', //content of page
'post_title' => $post_json['post_title'], //title of page
обычно моя функция PHP работает, но когда я изменил текст с помощью своих переменных PHP для json, он не работает.
если я использую свою функцию следующим образом:
'post_name' => 'example name',
это работает. но с приведенным ниже, это не работает:
'post_name' => $post_json['post_name'],
Ошибка PHP из файла журнала WordPress:
Invalid argument supplied for foreach()
Комментарии:
1. Вы получаете сообщения об ошибках? Не совсем понятно, в чем ваша проблема
2. @RiggsFolly ошибки нет. обычно он должен добавлять новые сообщения с помощью «foreach», но это не так
3. Вы могли бы выполнить var_dump($jsonDecode); var_dump($post_json); чтобы убедиться, что вы ожидаете того, что вы получаете.
4. @RiggsFolly Прошу прощения за неверную информацию. Я проверил это снова, и я вставил ошибку в вопрос, можете ли вы посмотреть еще раз?
5. это выглядит как
json_decode()
сбой, лучше проверьте, что файл на самом деле выглядит так, как вы думаете, и что он находится на этом пути и что он является допустимым json
Ответ №1:
Я подозреваю, что если вы добавите строки…
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);
… в верхней части вашего документа вы получите уведомления, похожие на:
Внимание: попытка получить доступ к смещению массива по значению типа null в..
Предупреждение: недопустимый аргумент, указанный для foreach() в…
Это потому json_decode
, что принимает as string
в качестве первого параметра, и вы предоставляете ему местоположение файла…
Изменить:
$jsonDecode = json_decode(__DIR__ . '/posts.json', true);
Для:
$jsonDecode = json_decode(file_get_contents(__DIR__ . '/posts.json'), true);
… и это должно сработать.
Ответ №2:
$jsonDecode = json_decode(file_get_contents(__DIR__ . '/posts.json'), true);
foreach($jsonDecode['posts'] as $post_json) {
//create a variable to specify the details of page
$post = array(
'post_name' => $post_json['post_name'],
'post_content' => 'This is a example content', //content of page
'post_title' => $post_json['post_title'], //title of page
);
}
Этот код работает, но я предполагаю, что вы получаете только 1 $post
случай в массиве.
Так что измените эту строку
$post = array(
Для
$post[] = array(
Теперь вы получите все вхождения
Комментарии:
1. Я знаю, как я уже сказал, пропустил это
2. Вы правы в том
$post[]
, что в противном случае он будет перезаписан! (Я предположил, что это была опечатка, поскольку он сказал, что это работает «нормально»)