English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como codificar e decodificar dados JSON em PHP.
JSON representa JavaScript Object Nação. JSON é um formato de troca de dados leve e padrão que pode ser analisado e gerado rapidamente e facilmente.
JSON e XML são formatos baseados em texto que são fáceis de escrever e entender para humanos e computadores, mas, ao contrário do XML, a estrutura de dados do JSON consome menos largura de banda do que a versão XML. JSON é baseado em duas estruturas básicas:
objetoisto é definido como/conjunto de pares de valores (ou seja, key:value). Cada objeto começa com um colchete esquerdo { e termina com um colchete direito }./Os pares de valores são separados por vírgulas,.
Array:definido como uma lista ordenada de valores. Os arrays começam com um colchete esquerdo [e terminam com um colchete direito ]. Os valores são separados por vírgulas,.
No JSON, as chaves são sempre strings e os valores podem serstring,número,verdadeirooufalso,nullaté mesmoobjectouarrayAs strings devem ser entre aspas duplas ("") e podem conter caracteres de escape, como \n, \t e \.
{ "book": { "name": "Harry Potter and the Goblet of Fire", "author": "J. K. Rowling", "year": 2000, "genre": "Fantasy Fiction", "bestseller": true } }
O exemplo de array JSON é mostrado a seguir:
{ "fruits": [ "Apple", "Banana", "Strawberry", "Mango" ] }
Dica:O formato de troca de dados é um formato de texto usado para trocar ou trocar dados entre diferentes plataformas e sistemas operacionais. JSON é o formato de troca de dados mais popular e mais leve para aplicativos web.
JSON数据结构与PHP数组非常相似。PHP具有内置函数来编码和解码JSON数据。这些函数分别是 json_encode() 和 json_decode()。这两个函数仅适用于UTF-8编码的字符串数据。
在PHP中,json_encode()函数用于将值编码为JSON格式。被编码的值可以是除资源之外的任何PHP数据类型,例如数据库或文件句柄。下面的示例演示如何将PHP关联数组编码为JSON对象:
<?php //关联数组 $marks = array("Peter"=>65, "Harry"=>80, "John"=>78, "Clark"=>90); echo json_encode($marks); ?>testar veja‹/›
上面示例的输出将如下所示:
{"Peter":65,"Harry":80,"John":78,"Clark":90}
同样,您可以将PHP索引数组编码为JSON数组,如下所示:
<?php //索引数组 $colors = array("Red", "Green", "Blue", "Orange", "Yellow"); echo json_encode($colors); ?>testar veja‹/›
上面示例的输出将如下所示:
["Red","Green","Blue","Orange","Yellow"]
您还可以通过使用JSON_FORCE_OBJECT选项强制json_encode()函数将PHP索引数组作为JSON对象返回,如下例所示:
<?php //索引数组 $colors = array("Red", "Green", "Blue", "Orange"); echo json_encode($colors, JSON_FORCE_OBJECT); ?>testar veja‹/›
上面示例的输出将如下所示:
{"0":"Red","1:"Green","2:"Blue","3:"Orange"
如您在以上示例中看到的,非关联数组可以编码为数组或对象。但是,关联数组始终编码为对象。
解码JSON数据就像对其进行编码一样简单。您可以使用PHP json_decode()函数将JSON编码的字符串转换为适当的PHP数据类型。以下示例演示如何将JSON对象解码或转换为PHP对象。
<?php //Armazenar dados JSON em uma variável PHP $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; var_dump(json_decode($json)); ?>testar veja‹/›
A saída do exemplo acima é como follows:
object(stdClass)#1 (4) { ["Peter"]=> int(65) ["Harry"]=> int(8) ["John"]=> int(78) ["Clark"]=> int(90)}
Por padrão, a função json_decode() retorna um objeto. Mas você pode especificar o segundo parâmetro $assoc, que aceita um valor booleano. Quando definido como true, o objeto JSON será decodificado em um array associativo. O padrão é false. Aqui está um exemplo:
<?php //Armazenar dados JSON em uma variável PHP $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; var_dump(json_decode($json, true)); ?>testar veja‹/›
A saída do exemplo acima é como follows:
array(4) { ["Peter"]=> int(65) ["Harry"]=> int(8) ["John"]=> int(78) ["Clark"]=> int(90)}
Agora, vamos ver um exemplo que mostra como decodificar dados JSON e acessar os elementos de um objeto ou array JSON no PHP.
<?php //Atribuir uma string codificada em JSON a uma variável PHP $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; //Decodificar dados JSON em um array associativo PHP $arr = json_decode($json, true); //Acessar valores do array associativo echo $arr["Peter"]; //Saída: 65 echo $arr["Harry"]; //Saída: 80 echo $arr["John"]; //Saída: 78 echo $arr["Clark"]; //Saída: 90 //Decodificar dados JSON em um objeto PHP $obj = json_decode($json); //Acessar valores do objeto retornado echo $obj;->Peter; //Saída: 65 echo $obj;->Harry; //Saída: 80 echo $obj;->John; //Saída: 78 echo $obj;->Clark; //Saída: 90 ?>testar veja‹/›
Você também pode usarforeach()Loop para percorrer os dados decodificados, conforme mostrado a seguir:
<?php //Atribuir uma string codificada em JSON a uma variável PHP $json = '{"Peter":65,"Harry":80,"John":78,"Clark":90}'; //Decodificar dados JSON em um array associativo PHP $arr = json_decode($json, true); //Percorrer um array associativo foreach($arr as $key=>$value){ echo $key . "=>" . $value . "<br>"; } echo "<hr>"; //Decodificar dados JSON em um objeto PHP $obj = json_decode($json); //Percorrer o objeto foreach($obj as $key => $value){ echo $key . "=>" . $value . "<br>"; } ?>testar veja‹/›
Objetos JSON e arrays também podem ser aninhados. Objetos JSON podem conter outros objetos JSON, arrays, arrays aninhados, arrays de objetos JSON, etc. O exemplo a seguir mostrará como decodificar objetos JSON aninhados e imprimir todos os valores no PHP.
<?php //Definir uma função recursiva para extrair valores aninhados function printValues($arr) { global $count; global $values; //Verificar se a entrada é um array if(!is_array($arr)){ die("Erro: entrada não é um array"); } /* Percorrer o array, se o value for um array, chamar recursivamente A função adiciona os valores encontrados ao array de itens de saída, e incrementar o contador para cada valor encontrado1 */ foreach($arr as $key=>$value){ if(is_array($value)){ printValues($value); } else{ $values[] = $value; $count++; } } // Retornar o total de contagens e valores encontrados no array return array('total' => $count, 'values' => $values); } //Atribuir uma string codificada em JSON a uma variável PHP $json = '{ "book": { "name": "Harry Potter and the Goblet of Fire", "author": "J. K. Rowling", "year": 2000, "characters": ["Harry Potter", "Hermione Granger", "Ron Weasley"], "genre": "Fantasy Fiction", "price": { "paperback": "$10.40", "hardcover": "$20.32", "kindle": "4.11" } } }'; //Decodificar os dados JSON no formato de array associativo do PHP $arr = json_decode($json, true); //Chamar essa função e imprimir todos os valores $result = printValues($arr); echo "<h3>" . $result["total"] . " valor(es) encontrado(s): </h3>"; echo implode("<br>", $result["values"]); echo "<hr>"; //Imprimir um valor echo $arr["book"]["author"] . "<br>"; //Saída: J. K. Rowling echo $arr["book"]["characters"][0] . "<br>"; //Saída: Harry Potter echo $arr["book"]["price"]["hardcover"]; //Saída: $20.32 ?>testar veja‹/›