sem suporte quadrado json array

Ao tentar acessar uma API, a matriz JSON deve ser analisada como esta

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

Mas quando eu estou fazendo o seguinte código

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

ele retorna o conjunto json sem colchetes quadrados da seguinte forma

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

Passei horas tentando descobrir como corrigir isso e simplesmente não consigo pensar em uma solução

Você precisa embrulhar coisas em outra array :

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

Isso será mais compreensível se usarmos a syntax equivalente da matriz do PHP 5.4:

 $data = [ "item" => [ ["id" => "123456", "name" => "adam"] ] ]; 

Compare isso com o JSON:

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

A única coisa a explicar é por que um dos arrays do PHP permanece uma matriz [] no JSON enquanto os outros dois se convertem para um object {} . Mas a documentação já o faz:

Ao codificar uma matriz, se as teclas não são uma seqüência numérica contínua a partir de 0, todas as chaves são codificadas como strings e especificadas explicitamente para cada par chave-valor.

Antes de ler este post, eu tinha isso:

echo json_encode($data);

Depois de ler esta publicação:

 echo json_encode(array($data)); 

Brackets apareceram no início e no final do object JSON.

🙂

Torna-se útil ao usar dessa maneira, para que você possa adicionar mais itens na matriz

 $val = array(); $val["id"]="123456"; $val["name"]="adam"; $data = array(); $data["item"][]=$val; echo json_encode($data); 

E será exibido abaixo:

{“item”: [{“id”: “123456”, “nome”: “adam”}]}