создать вложенный объект JSON в php?


Я не очень много работаю с php и немного не разбираюсь в создании объектов. Мне нужно сделать запрос на веб-сервис, отправляющий json, и я думаю, что эта часть у меня уже есть. Прежде чем я смогу отправить данные, мне нужно создать вложенный объект. Я предполагал, что это будет тривиально, основываясь на моем опыте работы с языками сценариев на основе ecma, но я нахожу синтаксис сложным для навигации. Объект, который я хочу создать, находится ниже.

{ "client": {
    "build": "1.0",
    "name": "xxxxxx",
    "version": "1.0"
    },
    "protocolVersion": 4,
    "data": {
        "distributorId": "xxxx",
        "distributorPin": "xxxx",
        "locale": "en-US"
    }
}

Я видел много примеров плоских объектов, но я я еще не нашел минимального примера вложенного объекта. Каким будет синтаксис php для объекта выше? Это необычная вещь для php?

 16
Author: Shane, 2013-04-04

7 answers

Эту структуру JSON можно создать, следуя PHP-коду

$json = json_encode(array(
     "client" => array(
        "build" => "1.0",
        "name" => "xxxxxx",
        "version" => "1.0"
     ),
     "protocolVersion" => 4,
     "data" => array(
        "distributorId" => "xxxx",
        "distributorPin" => "xxxx",
        "locale" => "en-US"
     )
));

См. код json_encode

 34
Author: Ejaz, 2013-04-04 11:53:43

Эй, вот быстрый трюк для ручного преобразования сложных JSON в объект PHP.

Возьмите пример JSON, как у вас есть:

{ "client": {
    "build": "1.0",
    "name": "xxxxxx",
    "version": "1.0"
    },
    "protocolVersion": 4,
    "data": {
        "distributorId": "xxxx",
        "distributorPin": "xxxx",
        "locale": "en-US"
    }
}

Поиск-Заменить { на array(

Поиск-Заменить : на =>

Поиск-Заменить } на )

Готово.

 9
Author: Guillermo Tallano, 2016-05-04 23:30:56

Пользовательский массив, чтобы получить правильный формат, а затем вызвать echo json_encode(массив)

           array( "client" => array(
    "build" => "1.0",
    "name" => "xxxxxx",
    "version" => "1.0"
 ),
 "protocolVersion" => 4,
 "data" => array(
    "distributorId" => "xxxx",
    "distributorPin" => "xxxx",
    "locale" => "en-US"
 ))
 4
Author: Devesh, 2013-04-04 11:52:32
$client = new Client();
$client->information = new Information();
$client->information->build = '1.0';
$client->information->name = 'xxxxxx';
$client->information->version = '1.0';
$client->protocolVersion = 4;
$client->data = new Data();
$client->data->distributorId = "xxxx";
$client->data->distributorPin = "xxxx";
$client->data->locale = "en-US";

Возможно, что-то вроде вышеперечисленного? Клиент будет держать в руках два предмета. Информация и данные.

Редактировать Используя json_encode, вы бы создали этот объект в виде массива в PHP..

$clientObj = array('client'=> 
    array( array('build'=>'1.0','name'=>'xxxx', 'version'=>'1.0'), 

           'protocolVersion'=>4, 

           'data'=>array('distributorId' => 'xxxx', 'distributorPin' => 'xxxx', 'locale' => 'en-US')
);

print json_encode($clientObj);
 3
Author: ilikemypizza, 2013-04-04 11:59:21

Мы также можем построить вложенный массив, а затем выполнить код json_encode для построения вложенного JSON.

Например:

{"User":
       {"username":"test",
        "address":"Posted value fro address field",
        "location":{
                     "id":12345
                    }
        }
}

Вышеуказанного результата мы можем достичь, написав ниже php-код:

<?php
$obj = array(
            'username'=>$lv_username,
            'address'=>$lv_address,
            'location'=>array('id'=>$lv_locationId)
    );
$data = '{"User":'. json_encode($obj) .'}';
echo $data;

?>

Надеюсь, это поможет.

 2
Author: MSVKC, 2015-12-20 11:28:27

Используйте функцию сборки в PHP:

Код Json_encode();

Это преобразует массив в объект JSON.

 1
Author: Code Lღver, 2013-04-04 11:53:30

Вы можете использовать json_encode для кодирования массива php http://php.net/manual/en/function.json-encode.php

$theArray = array('client'= array('build'=>'1.0', 
                                'name'=>'xxxxx', 
                                'version'=>'1.0'
                               ), 
                'protocolVersion'=> 4, 
                'data'=> array('distributorId'=>'xxxx', 
                               'distributorPin'=>'xxxx', 
                               'locale'=>'en-US' 
                               ) 
                );

$theObj = json_encode($theArray);

Надеюсь, это поможет..

Опубликовал его, а затем уже увидел множество ответов!:|

 1
Author: Marty, 2013-04-04 11:56:39