Я не очень много работаю с php, и я немного нечеткий при создании объекта. Мне нужно сделать запрос webservice, отправляющий json, и я думаю, что у меня есть эта часть. Прежде чем я могу представить данные, мне нужно создать вложенный объект. Я предполагал, что это будет тривиально на основе моего опыта работы с языками сценариев на основе ecma, но я считаю, что синтаксис трудно ориентироваться. Объект, который я хочу создать, приведен ниже.
{ "client": { "build": "1.0", "name": "xxxxxx", "version": "1.0" }, "protocolVersion": 4, "data": { "distributorId": "xxxx", "distributorPin": "xxxx", "locale": "en-US" } }
Я видел много примеров плоских объектов, но пока не нашел минимального примера для вложенного объекта. Каким будет синтаксис php для объекта выше? Это необычная вещь для php?
эта структура 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
Эй, это быстрый трюк, чтобы вручную преобразовать сложные JSON в PHP-объект.
Возьмите пример JSON, как вы:
{ "client": { "build": "1.0", "name": "xxxxxx", "version": "1.0" }, "protocolVersion": 4, "data": { "distributorId": "xxxx", "distributorPin": "xxxx", "locale": "en-US" } }
Поиск-Заменить {
на array(
Search-Replace :
to =>
Search-Replace }
to )
Готово.
Пользовательский массив, чтобы получить правильный формат, а затем вызвать 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" ))
$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);
Мы также можем построить вложенный массив, а затем выполнить 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; ?>
Надеюсь, поможет.
Используйте встроенную функцию PHP:
json_encode ();
это преобразует массив в объект JSON.
Вы можете использовать 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);
надеюсь, это поможет ..
разместил его, а потом уже видел множество ответов! : |