no square bracket json array
You need to wrap things in another array
:
$data = array("item" => array(array("id" => "123456", "name" => "adam")));
This will be more understandable if we use the equivalent PHP 5.4 array syntax:
$data = [ "item" => [ ["id" => "123456", "name" => "adam"] ] ];
Compare this with the JSON:
{ "item": [ {"id":"123456", "name":"adam" } ] }
The only thing to explain is why one of the PHP arrays remains an array []
in JSON while the other two get converted to an object {}
. But the documentation already does so:
When encoding an array, if the keys are not a continuous numeric sequence starting from 0, all keys are encoded as strings, and specified explicitly for each key-value pair.
Before reading this post, I had this:
echo json_encode($data);
After reading this post:
echo json_encode(array($data));
Brackets appeared on the start and end of the JSON object.
:)
It become handy when using this way, so you can add more items on the array
$val = array();
$val["id"]="123456";
$val["name"]="adam";
$data = array();
$data["item"][]=$val;
echo json_encode($data);
And it will ouput below:
{"item":[{"id":"123456", "name":"adam"}]}