print - return json php
Devolviendo JSON desde un script PHP (15)
Como se dijo anteriormente:
header(''Content-Type: application/json'');
Hará el trabajo. pero tenga en cuenta que:
Ajax no tendrá problemas para leer json incluso si este encabezado no se usa, 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 al encabezado () fallará.
Quiero devolver JSON desde un script PHP.
¿Me hago eco del resultado? ¿Tengo que configurar el encabezado Content-Type
?
De acuerdo con el manual en json_encode
el método puede devolver un no-string ( falso ):
Devuelve una cadena codificada JSON en caso de éxito o
FALSE
en caso de error.
Cuando esto suceda, echo json_encode($data)
generará una cadena vacía, que no es válida para JSON .
json_encode
ejemplo, json_encode
fallará (y devolverá false
) si su argumento contiene una cadena que no es UTF-8.
Esta condición de error debe capturarse en PHP, por ejemplo, como este:
<?php
header("Content-Type: application/json");
// Collect what you need in the $data variable.
$json = json_encode($data);
if ($json === false) {
// Avoid echo of empty string (which is invalid JSON), and
// JSONify the error message instead:
$json = json_encode(array("jsonError", json_last_error_msg()));
if ($json === false) {
// This should not happen, but we go all the way now:
$json = ''{"jsonError": "unknown"}'';
}
// Set HTTP response status code to: 500 - Internal Server Error
http_response_code(500);
}
echo $json;
?>
Luego, el extremo receptor debe tener en cuenta que la presencia de la propiedad jsonError indica una condición de error, que debe tratarse 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 con los errores de JSON en la documentación de PHP .
Establezca el tipo de contenido con el header(''Content-type: application/json'');
y luego hacer eco de sus datos.
Este es un script PHP simple para devolver el nombre femenino y de usuario como json. El valor será cualquier valor aleatorio al llamar al script json.php.
Espero esta ayuda gracias
<?php
header("Content-type: text/json");
$myObj=new /stdClass();
$myObj->user_id = rand(0, 10);
$myObj->male = rand(0, 5);
$myObj->female = rand(0, 5);
$myJSON = json_encode($myObj);
echo $myJSON;
?>
Intente json_encode para codificar los datos y establecer el tipo de contenido con el header(''Content-type: application/json'');
.
La respuesta a tu pregunta está aquí .
Dice.
El tipo de medio MIME para texto JSON es application / json.
por lo tanto, si establece el encabezado en ese tipo y genera su cadena JSON, debería funcionar.
Puedes usar esta pequeña librería de PHP . Envía los encabezados y te da un objeto para usarlo fácilmente.
Parece que :
<?php
// Include the json class
include(''includes/json.php'');
// Then create the PHP-Json Object to suits your needs
// Set a variable ; var name = {}
$Json = new json(''var'', ''name'');
// Fire a callback ; callback({});
$Json = new json(''callback'', ''name'');
// Just send a raw JSON ; {}
$Json = new json();
// Build data
$object = new stdClass();
$object->test = ''OK'';
$arraytest = array(''1'',''2'',''3'');
$jsonOnly = ''{"Hello" : "darling"}'';
// Add some content
$Json->add(''width'', ''565px'');
$Json->add(''You are logged IN'');
$Json->add(''An_Object'', $object);
$Json->add("An_Array",$arraytest);
$Json->add("A_Json",$jsonOnly);
// Finally, send the JSON.
$Json->send();
?>
Sí, necesitarás usar eco para mostrar la salida. Mimetype: application / json
Sí, simplemente configure el encabezado HTTP apropiado, haga eco del resultado y luego salga de la secuencia de comandos.
Si bien normalmente no lo tiene, puede y debe configurar 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 una solución rápida de problemas, no enviar un encabezado o, a veces, imprimir la carga útil de datos al globo ocular (aunque, en la mayoría de los casos, no debería ser necesario).
Si consulta una base de datos y necesita el conjunto de resultados en formato JSON, puede hacerlo de la siguiente manera:
<?php
$db = mysqli_connect("localhost","root","","mylogs");
//MSG
$query = "SELECT * FROM logs LIMIT 20";
$result = mysqli_query($db, $query);
//Add all records to an array
$rows = array();
while($row = $result->fetch_array()){
$rows[] = $row;
}
//Return result to jTable
$qryResult = array();
$qryResult[''logs''] = $rows;
echo json_encode($qryResult);
mysqli_close($db);
?>
Para obtener ayuda para analizar el resultado utilizando jQuery, eche un vistazo a este tutorial .
Si necesita obtener json de php enviando información personalizada, puede agregar este header(''Content-Type: application/json'');
antes de imprimir cualquier otra cosa, entonces puedes imprimir tu custome echo ''{"monto": "''.$monto[0]->valor.''","moneda":"''.$moneda[0]->nombre.''","simbolo":"''.$moneda[0]->simbolo.''"}'';
También es bueno establecer la seguridad de acceso, simplemente reemplace * con el dominio al que desea poder acceder.
<?php
header(''Access-Control-Allow-Origin: *'');
header(''Content-type: application/json'');
$response = array();
$response[0] = array(
''id'' => ''1'',
''value1''=> ''value1'',
''value2''=> ''value2''
);
echo json_encode($response);
?>
Aquí hay más ejemplos de eso: ¿cómo omitir Access-Control-Allow-Origin?
Una forma fácil de formatear los objetos de su dominio a JSON es usar Marshial Serializer . Luego pase los datos a json_encode
y envíe el encabezado Content-Type correcto para sus necesidades. Si está utilizando un marco como Symfony, no necesita encargarse de configurar los encabezados manualmente. Allí puedes 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, use application/json
como Content-Type.
Aquí hay un pequeño ejemplo:
<?php
...
$userCollection = [$user1, $user2, $user3];
$data = Marshal::serializeCollectionCallable(function (User $user) {
return [
''username'' => $user->getUsername(),
''email'' => $user->getEmail(),
''birthday'' => $user->getBirthday()->format(''Y-m-d''),
''followers => count($user->getFollowers()),
];
}, $userCollection);
header(''Content-Type: application/json'');
echo json_encode($data);
Una pieza completa de código PHP agradable y claro que devuelve JSON es:
$option = $_GET[''option''];
if ( $option == 1 ) {
$data = [ ''a'', ''b'', ''c'' ];
// will encode to JSON array: ["a","b","c"]
// accessed as example in JavaScript like: result[1] (returns "b")
} else {
$data = [ ''name'' => ''God'', ''age'' => -1 ];
// will encode to JSON object: {"name":"God","age":-1}
// accessed as example in JavaScript like: result.name or result[''name''] (returns "God")
}
header(''Content-type: application/json'');
echo json_encode( $data );