php array to json square bracket

2020. 10. 14. 15:27PHP

728x90

no square bracket json array

Ask Question

Asked 7 years, 6 months ago

Active 9 months ago

Viewed 39k times

 

30

11

When trying to access an API the JSON array must be parsed like this

{"item":[{"id":"123456", "name":"adam"}]}

But when i'm doing the following code

$data = array("item" => array("id" => "123456", "name" => "adam")); echo json_encode($data);

it returns the json array without squared brackets as follows

{"item":{"id":"123456","name":"adam"}}

I've spent hours trying to figure out how to fix this and just can't think of a solution

phpjson

share  improve this question  follow 

asked Mar 21 '13 at 22:55

Curtis Crewe

3,3844 gold badges23 silver badges30 bronze badges

add a comment

4 Answers

ActiveOldestVotes

63

 

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.

share  improve this answer  follow 

answered Mar 21 '13 at 22:57

Jon

384k68 gold badges675 silver badges758 bronze badges

add a comment

 

7

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.

:)

share  improve this answer  follow 

answered Mar 5 '16 at 4:57

Chad

5418 silver badges21 bronze badges

add a comment

3

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"}]}

share  improve this answer  follow 

answered Mar 22 '17 at 8:52

Dards

811 silver badge5 bronze badges

add a comment

0

Based on your code:

$data = array("item" => array("id" => "123456", "name" => "adam")); echo json_encode($data);

You should just use another array() to force the bracket.

$data = array("item" => array(array("id" => "123456", "name" => "adam"))); echo json_encode($data);

This will return the value you are looking for:

{ "item": [ {"id":"123456", "name":"adam" } ] }

share  improve this answer  follow 

answered Jan 14 at 18:51

Lietmotiv

1

728x90
반응형