Не валидный JSON, PHP

171
16 июля 2018, 16:30

Получаю вот такой JSON:

{
    "shops":"[
        {
            "id":68,
            "name":"ТЦ МЕГА Уфа",
            "address":"Уфа, ул. Рубежная, д. 174, ТЦ МЕГА Уфа",
            "modeWork":"Ежедневно с 10:00 до 22:00",
            "url":"https://www.mvideo.ru/shops/S356",
            "latitude":54.674,
            "longitude":55.929,
            "chainStore":{
                "id":1,
                "name":"М.Видео",
                "type":"1",
                "imagePath":null
            }
        },
        {
            "id":105,
            "name":"ЦТиР Мир",
            "address":"Уфа, пр-т Октября, д. 4/1, ЦТиР Мир",
            "modeWork":"Ежедневно с 10:00 до 22:00",
            "url":"https://www.mvideo.ru/shops/S110",
            "latitude":54.74,
            "longitude":55.986,
            "chainStore":{
                "id":1,
                "name":"М.Видео",
                "type":"1",
                "imagePath":null
            }
        }
    ]"
}

Онлайн валидаторы пишут, что он не валидный, ошибка syntax. В чем ошибка? Вот так я его получаю:

function getAllShops($locality_id, $query){
...
        $shops = array();
        $chain_store = array();
        while($stmt->fetch()){
            $temp = array();
            $temp['id'] = $id;
            $temp['name'] = $name;
            $temp['address'] = $address;
            $temp['modeWork'] = $modeWork;            
            $temp['url'] = $url;
            $temp['latitude'] = $latitude;
            $temp['longitude'] = $longitude;                
            $chain_store['id'] = $chain_stores_id;
            $chain_store['name'] = $chain_stores_name;            
            $chain_store['type'] = $chain_stores_type;
            $chain_store['imagePath'] = $chain_stores_imagePath;
            $temp['chainStore'] = $chain_store;
            array_push($shops, $temp);
        }
        return json_encode($shops);
}

Место, где вызывается этот метод:

$response->getBody()->write(json_encode(array("shops" => $shops)));

Если что, использую Slim для написания API.

Answer 1

У вас в значении не массив а строка получается, нужно заменить:

"shops":"[

На

"shops":[

И так же убрать символ " в конце массива.

READ ALSO
Логика работы с приложениями facebook

Логика работы с приложениями facebook

Настраиваю приложение которое будет получать посты со стены публичной страницы и постить на сайте, столкнулся с некоторыми непонятностями,...

179
Как в объект php положить функцию?

Как в объект php положить функцию?

В документации могу найти только классы, конструкторы

149
Base64 Image конфликтует с остальным HTML

Base64 Image конфликтует с остальным HTML

У меня есть изображения base64Я шифрую и потом дешифровываю эти изображения

204