Se pretende que sea una pregunta y respuesta de referencia general que cubra muchos de los interminables "¿Cómo accedo a los datos en mi JSON?" preguntas Está aquí para manejar los conceptos básicos generales de decodificar JSON en PHP y acceder a los resultados.
Tengo el JSON:
{
"type": "donut",
"name": "Cake",
"toppings": [
{ "id": "5002", "type": "Glazed" },
{ "id": "5006", "type": "Chocolate with Sprinkles" },
{ "id": "5004", "type": "Maple" }
]
}
¿Cómo decodifico esto en PHP y accedo a los datos resultantes?
Respuestas:
Introducción
Primero tienes una cuerda. JSON no es una matriz, un objeto o una estructura de datos. JSON es un formato de serialización basado en texto, por lo que es una cadena elegante, pero sigue siendo solo una cadena. Descifrarlo en PHP mediante el uso
json_decode()
.Ahí puedes encontrar:
Estas son las cosas que se pueden codificar en JSON. O más exactamente, estas son versiones de PHP de las cosas que se pueden codificar en JSON.
No hay nada especial en ellos. No son "objetos JSON" o "matrices JSON". Has decodificado el JSON, ahora tienes tipos básicos de PHP para todos los días .
Los objetos serán instancias de stdClass , una clase incorporada que es simplemente una cosa genérica que no es importante aquí.
Accediendo a las propiedades del objeto
Accede a las propiedades de uno de estos objetos de la misma manera que lo haría para las propiedades públicas no estáticas de cualquier otro objeto, por ejemplo
$object->property
.Acceso a elementos de la matriz
Accede a los elementos de una de estas matrices de la misma manera que lo haría con cualquier otra matriz, por ejemplo
$array[0]
.Iterar sobre ello con
foreach
.O juegue con cualquiera de las funciones de matriz integradas de bazillion .
Acceder a elementos anidados
Las propiedades de los objetos y los elementos de las matrices pueden ser más objetos y / o matrices; simplemente puede continuar accediendo a sus propiedades y miembros como de costumbre, por ejemplo
$object->array[0]->etc
.Pasando
true
como segundo argumento a json_decode ()Cuando haces esto, en lugar de objetos obtendrás matrices asociativas, matrices con cadenas para claves. De nuevo accede a los elementos de los mismos como de costumbre, por ejemplo
$array['key']
.Acceso a elementos de matriz asociativa
Al decodificar un objeto JSON en una matriz PHP asociativa, puede iterar tanto claves como valores utilizando la
foreach (array_expression as $key => $value)
sintaxis, por ejemploHuellas dactilares
No sé cómo se estructuran los datos.
Lea la documentación de lo que sea que esté obteniendo el JSON.
Mire el JSON: donde ve que los corchetes
{}
esperan un objeto, donde ve que los corchetes[]
esperan una matriz.Golpee los datos decodificados con un
print_r()
:y verifique la salida:
Le dirá dónde tiene objetos, dónde tiene matrices, junto con los nombres y valores de sus miembros.
Si solo puede llegar tan lejos antes de perderse, vaya tan lejos y golpee eso con
print_r()
:Echa un vistazo en este práctico explorador interactivo JSON .
Divide el problema en pedazos que sean más fáciles de entender.
json_decode()
devolucionesnull
Esto sucede porque:
null
,.json_last_error_msg
o póngalo en algo como JSONLint .json_decode()
.Si necesita cambiar la profundidad máxima, probablemente esté resolviendo el problema incorrecto. Descubra por qué está obteniendo datos tan anidados (por ejemplo, el servicio que está consultando que genera el JSON tiene un error) y haga que eso no suceda.
El nombre de la propiedad del objeto contiene un carácter especial.
A veces tendrá un nombre de propiedad de objeto que contiene algo como un guión
-
o un signo@
que no se puede usar en un identificador literal. En su lugar, puede usar un literal de cadena entre llaves para abordarlo.Si tiene un entero como propiedad, consulte: ¿Cómo acceder a las propiedades de los objetos con nombres como enteros? como referencia.
Alguien puso JSON en tu JSON
Es ridículo, pero sucede: hay JSON codificado como una cadena dentro de su JSON. Decodifique, acceda a la cadena como de costumbre, decodifique eso y, finalmente, obtenga lo que necesita.
Los datos no caben en la memoria
Si su JSON es demasiado grande para
json_decode()
manejarlo de inmediato, las cosas comienzan a complicarse. Ver:Cómo ordenarlo
Ver: Referencia: todas las formas básicas de ordenar matrices y datos en PHP .
fuente
Puede usar json_decode () para convertir una cadena json en un objeto / matriz PHP.
P.ej.
Entrada:
Salida:
Pocos puntos para recordar:
json_decode
requiere que la cadena sea válida; de lojson
contrario, volveráNULL
.json_last_error()
puede usarse para determinar la naturaleza exacta del error.utf8
contenido, ojson_decode
puede generar un error y simplemente devolver unNULL
valor.fuente
fuente
Podemos decodificar la cadena json en una matriz usando la función json_decode en php
1) json_decode ($ json_string) // devuelve el objeto
2) json_decode ($ json_string, true) // devuelve una matriz
fuente
Considere usar
JSONPath
https://packagist.org/packages/flow/jsonpathHay una explicación bastante clara de cómo usarlo y analizar un archivo JSON evitando todos los bucles propuestos. Si está familiarizado con el
XPath
deXML
usted comenzará a amar a este enfoque.fuente
He escrito un paquete llamado
JSON
( GitHub , Packagist ). Si desea evitar gastos generales de usojson_*
funciones, debe intentarlo.Ejemplo
Vea el wiki o el tutorial rápido para familiarizarse con él.
Además, si desea leer archivos JSON y extraer sus datos (ya que parece que está intentando realizar esto), consulte el paquete JSONFile , que también lo he escrito.
fuente
https://paiza.io/projects/X1QjjBkA8mDo6oVh-J_63w
Verifique el código a continuación para convertir json en matriz
PHP
, si JSON es correcto, entoncesjson_decode()
funciona bien y devolverá una matriz, pero si JSON está mal formado, entonces regresaráNULL
,Si JSON tiene un formato incorrecto y solo espera una matriz, puede usar esta función,
Si JSON tiene un formato incorrecto y desea detener la ejecución del código, puede usar esta función,
Puede usar cualquier función según sus requisitos,
fuente