Quiero devolver JSON de un script PHP.
¿Acabo de hacer eco del resultado? ¿Tengo que configurar el Content-Type
encabezado?
Si bien normalmente está bien sin él, puede y debe establecer el encabezado Content-Type:
<?PHP
$data = /** whatever you're serializing **/;
header('Content-Type: application/json');
echo json_encode($data);
Si no estoy usando un marco en particular, generalmente permito que algunos parámetros de solicitud modifiquen el comportamiento de salida. Puede ser útil, generalmente para la resolución rápida de problemas, no enviar un encabezado, o a veces imprimir_r la carga de datos para mirarlo (aunque en la mayoría de los casos, no debería ser necesario).
header('Content-type:application/json;charset=utf-8');
Una pieza completa de código PHP agradable y claro que devuelve JSON es:
fuente
De acuerdo con el manual sobre
json_encode
el método puede devolver una no cadena ( falso ):Cuando esto sucede,
echo json_encode($data)
generará la cadena vacía, que no es válida JSON .json_encode
por ejemplo fallará (y regresaráfalse
) si su argumento contiene una cadena que no es UTF-8.Esta condición de error debe capturarse en PHP, por ejemplo, así:
Entonces, el extremo receptor debe ser consciente de que la presencia de la propiedad jsonError indica una condición de error, que debe tratar en consecuencia.
En el modo de producción, podría ser mejor enviar solo un estado de error genérico al cliente y registrar los mensajes de error más específicos para una investigación posterior.
Lea más sobre cómo tratar los errores JSON en la documentación de PHP .
fuente
charset
parámetro para JSON; vea la nota al final de tools.ietf.org/html/rfc8259#section-11 : "No se define ningún parámetro 'charset' para este registro. Agregar uno realmente no tiene ningún efecto en los destinatarios que cumplen con los requisitos". (JSON debe transmitirse como UTF-8 por tools.ietf.org/html/rfc8259#section-8.1 , por lo que especificar que está codificado como UTF-8 es un poco redundante).charset
Parámetro redundante eliminado de la cadena del encabezado HTTP.Pruebe json_encode para codificar los datos y establecer el tipo de contenido con
header('Content-type: application/json');
.fuente
Establezca el tipo de contenido con
header('Content-type: application/json');
y luego haga eco de sus datos.fuente
También es bueno establecer la seguridad de acceso: simplemente reemplace * con el dominio que desea para poder acceder a él.
Aquí hay más ejemplos sobre eso: ¿cómo omitir Access-Control-Allow-Origin?
fuente
fuente
Como se dijo anteriormente:
Hará el trabajo. pero ten en cuenta que:
Ajax no tendrá problemas para leer json incluso si no se usa este encabezado, excepto si su json contiene algunas etiquetas HTML. En este caso, debe establecer el encabezado como application / json.
Asegúrese de que su archivo no esté codificado en UTF8-BOM. Este formato agrega un carácter en la parte superior del archivo, por lo que su llamada de encabezado () fallará.
fuente
Una función simple para devolver una respuesta JSON con el código de estado HTTP .
fuente
header_remove
, y establecer explícitamente la respuesta http es una buena idea; aunque establecer el estado y luego http_response parece redundante. También podría querer agregar unaexit
declaración al final. Combiné tu función con la de @trincot: stackoverflow.com/a/35391449/339440La respuesta a tu pregunta está aquí ,
Dice.
así que si configura el encabezado a ese tipo y genera su cadena JSON, debería funcionar.
fuente
Sí, necesitarás usar echo para mostrar la salida. Mimetype: application / json
fuente
Si necesita obtener json de php enviando información personalizada, puede agregar esto
header('Content-Type: application/json');
antes para imprimir cualquier otra cosa, para que pueda imprimir su customeecho '{"monto": "'.$monto[0]->valor.'","moneda":"'.$moneda[0]->nombre.'","simbolo":"'.$moneda[0]->simbolo.'"}';
fuente
Si consulta una base de datos y necesita el conjunto de resultados en formato JSON, puede hacerlo así:
Para obtener ayuda para analizar el resultado con jQuery, eche un vistazo a este tutorial .
fuente
Este es un script PHP simple para devolver la identificación masculina femenina y de usuario, ya que el valor json será cualquier valor aleatorio cuando llame al script json.php.
Espero esta ayuda gracias
fuente
Una manera fácil de formatear los objetos de su dominio a JSON es utilizar el serializador Marshal . Luego pase los datos
json_encode
y envíe el encabezado de tipo de contenido correcto para sus necesidades. Si está utilizando un marco como Symfony, no necesita ocuparse de configurar los encabezados manualmente. Allí puede usar el JsonResponse .Por ejemplo, el tipo de contenido correcto para tratar con Javascript sería
application/javascript
.O si necesita admitir algunos navegadores bastante antiguos, lo más seguro sería
text/javascript
.Para todos los demás fines, como una aplicación móvil, utilícela
application/json
como Content-Type.Aquí hay un pequeño ejemplo:
fuente
Siempre que intente devolver la respuesta JSON para API o asegúrese de tener los encabezados adecuados y también asegúrese de devolver datos JSON válidos.
Aquí está el script de muestra que le ayuda a devolver la respuesta JSON de la matriz PHP o del archivo JSON.
fuente
Puedes usar esta pequeña biblioteca PHP . Envía los encabezados y le da un objeto para usarlo fácilmente.
Parece que :
fuente