Можете подсказать, почему подобный код (ниже), выводит такую ошибку Warning: Illegal string offset 'key'
file.json:
[{
'key': {
0: {
'key0': "data-0-0",
'key1': "data-0-1"
},
1: {
'key0': "data-1-0",
'key1': "data-1-1"
}
}
}]
index.php:
$json = json_encode( file_get_contents( 'file.json' ) );
var_dump ( $json['key'] );
В файле, file.json
нет никаких дополнительных символов.
Причины аж сразу три. И ни одна не имеет никакого отношения к file_get_contents
Первая: представленный file.json
вы называете JSON
по какому-то заблуждению. Он нарушает соответствующий RFC используя одинарные кавычки для строковых значений имён свойств. Затем, ключи 0:
не могут быть так записаны, это должен быть или массив объявленный через использование квадратных скобок либо ключи должны быть взяты в кавычки как строки. Поэтому json_decode
вовсе прочитать структуру не может.
Второе: потому что нет у вас в JSON на верхнем уровне объекта с ключом key
. У вас есть массив из одного объекта, в котором есть свойство key
.
И третья ошибка - вы вызываете json_decode
без второго параметра. Соответственно у вас вообще никогда не получится массив с ассоциативными ключами: будет или массив с числовыми ключами или объект класса stdClass
для массива и объекта JSON документа соответственно.
Вот в таком виде - смысл имеет:
$input = <<<JSON
[{
"key": {
"0": {
"key0": "data-0-0",
"key1": "data-0-1"
},
"1": {
"key0": "data-1-0",
"key1": "data-1-1"
}
}
}]
JSON;
$json = json_decode($input, true);
var_dump($json[0]['key']);
Отдельного вопроса заслуживает заявленная в заголовке ошибка Warning: Illegal string offset 'key'
. Её так получить вовсе не выйдет, ошибка связана с попыткой обращения к строке как массиву с символьным ключом. Например, если вы json_decode
не делаете вовсе.
Итог в общем-то един, смотрите на то что получаете через тот же var_dump
и анализируйте следующие необходимые шаги до нужных вам данных.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть файл с новостями (нельзя использовать sql)Каждая третья строка является названием статьи