2013-04-04 2 views
15

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

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

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

ответ

32

это 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

+0

отлично, именно то, что я ищу, спасибо. (еще не могу принять, но скоро). – Shane

4

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

  array("client" => array(
    "build" => "1.0", 
    "name" => "xxxxxx", 
    "version" => "1.0" 
), 
"protocolVersion" => 4, 
"data" => array(
    "distributorId" => "xxxx", 
    "distributorPin" => "xxxx", 
    "locale" => "en-US" 
)) 
3
$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); 
+0

Должен ли мне создать тип клиента? – Shane

+0

stdClass будет работать нормально. –

+0

Да, для создания «на лету» определенно stdClass. – ilikemypizza

1

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

json_encode();

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

1

Вы можете использовать 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); 

надеюсь, что это помогает ..

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

2

Мы также можем построить вложенный массив, а затем выполнить 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; 

?> 

Надеется, что это помогает.

7

Эй, это быстрый трюк, чтобы вручную преобразовать сложные JSON в PHP-объект.

Берем пример JSON, как у вас есть:

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

Search-Replace { в array(

Search-Replace : в =>

Search-Replace } в )

Done ,

Смежные вопросы