В VK API есть загрузка фотографий для товаров (vk.com/dev). Одним из шагов загрузки является получение от VK такого JSON:
{"server":625831,"photo":"[{\"photo\":\"8d81799f90:w\",\"sizes\":[[\"s\",\"625831075\",\"45839\",\"-5fbUeQq1YY\",75,56],[\"m\",\"625831075\",\"4583a\",\"G8yAYbsk7M4\",130,97]]}]","hash":"8954a4da5ba06d4e","crop_data":"oAAmMpwAAAAAlTWyjA","crop_hash":"729155760247b391134"}
Документация уточняет что разбирать нужно только первый уровень, внутренние элементы тоже могут оказаться JSON, но разбирать их не надо:
Обратите внимание, что ответ сервера всегда приходит в формате JSON, а поля server, photo, hash, crop_data и crop_hash в нем содержат строки, внутренний формат которых может изменяться со временем. В частности, строка photo может содержать другой JSON-объект, который не следует декодировать, разбирать на части или иным образом модифицировать.
Вопрос: как с помощью стандартной json_decode разобрать только первый уровень JSON, оставив остальные строками?
Для того чтоб нам разговаривать на одном языке упростим ситуацию.
<?php
$data = [
'alice'=>[
'age'=>30,
'sex'=>'f',
],
'bob'=>[
'age'=>25,
'sex'=>'m',
],
];
$json = json_encode($data);
//{"alice":{"age":30,"sex":"f"},"bob":{"age":25,"sex":"m"}}
$decoded = json_decode($json);
//набор объектов stdClass. Каждый объект имеет свои свойства. Json разложен полностью
$decodedAssoc = json_decode($json, TRUE);
//Ассоциативный массив. Json разложен полностью
$decodedDepth = json_decode($json, TRUE, 1);
//NULL Вложенных уровней больше чем указано
а вообще-то, если бы вы проверили, то api делает всё честно, внутренние json'ы переданы как строковые элементы, а не как чать структуры.
print_r(json_decode($str, true));
результат
Array
(
[server] => 625831
[photo] => [{"photo":"8d81799f90:w","sizes":[["s","625831075","45839","-5fbUeQq1YY",75,56],["m","625831075","4583a","G8yAYbsk7M4",130,97]]}]
[hash] => 8954a4da5ba06d4e
[crop_data] => oAAmMpwAAAAAlTWyjA
[crop_hash] => 729155760247b391134
)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нужно узнать name полей <input> для входа в роутер
Если я не ошибаюсь, то метод getObjectUrl, возвращает url для "внутреннего" использования и не предназначен для публичного использования
Есть таблица с объявлениями, для каждого объявления есть несколько категорий, все категории хранятся в одной таблицеУ таблицы объявлений...