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