¿Cómo generar un archivo .json con PHP?

127
CREATE TABLE Posts
{
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
url VARCHAR(200)
}

código json.php

<?php
$sql=mysql_query("select * from Posts limit 20");
echo '{"posts": [';
while($row=mysql_fetch_array($sql))
{
$title=$row['title'];
$url=$row['url'];
echo '

{

"title":"'.$title.'",

"url":"'.$url.'"

},'; 
}
echo ']}';

?>

Tengo que generar el results.jsonarchivo.

Egglabs
fuente
1
Tener alguna explicación / contexto en nuestra pregunta es en lo más cortés. Esta pregunta parece más un orden implícito para nadie en particular y la comunidad de desbordamiento de pila en general ..
Sl4rtib4rtf4st

Respuestas:

247

Aquí hay un código de muestra:

<?php 
$sql="select * from Posts limit 20"; 

$response = array();
$posts = array();
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)) { 
  $title=$row['title']; 
  $url=$row['url']; 

  $posts[] = array('title'=> $title, 'url'=> $url);
} 

$response['posts'] = $posts;

$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($response));
fclose($fp);


?> 
Alec Smart
fuente
1
Usé este código en mi proyecto. El archivo results.json funciona bien en el host local y falla en el servidor remoto. ¿Puedes explicar por qué? ..
Vignesh Gopalakrishnan
44
Fwrite podría desactivarse en la configuración de su servidor
Chris
aunque esto es genial tal vez porque estoy usando PHP 5 ahora y no estaba disponible en el momento en que se publicó esta respuesta, pero puedes deshacerte de la $ result = line y dentro de tu ciclo while solo crea mysql_feth_array ($ sql)
Actualice la primera línea a $ sql = "select * from Posts limit 20"; , eliminar mysql_query ()
Sachin Vairagi
66
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- utiliza espacios en blanco para formatear el JSON. Otras constantes aquí
Andrei Krasutski
49

Utilizar este:

$json_data = json_encode($posts);
file_put_contents('myfile.json', $json_data);

Debe crear myfile.json antes de ejecutar el script.

RileyManda
fuente
De hecho, en la fecha del comentario no es necesario crear el archivo antes de guardar los datos. Aunque todavía tiene que crear las subcarpetas no existentes, si las hay, a lo largo de la ruta de guardado. Aquí está el documento oficial de file_put_contents solo por conveniencia.
Valentine Shi
1
Sí, los lenguajes de programación evolucionan. Mi respuesta de la publicación se publicó en 2017. Debería haber publicado una nueva respuesta con una forma actualizada de hacerlo en lugar de solo un código votado que funcionó en 2017
RileyManda
1
No hay cambio en el recorte que le diste. Justo como file_put_contentsfunciona lo que mencioné en mi comentario inicial.
Valentine Shi
30

Inserte sus valores recuperados en una matriz en lugar de hacer eco.

Use file_put_contents()e inserte json_encode($rows)en ese archivo, si $rowsson sus datos.

chelmertz
fuente
2
Veo que su respuesta fue publicada antes de la más votada. Si solo hubiera puesto un código de ejemplo, habría obtenido muchos más votos.
Engin Yapici
7

Aquí he mencionado la sintaxis simple para crear un archivo json e imprimir el valor de la matriz dentro del archivo json de una manera bonita.

$array = array('name' => $name,'id' => $id,'url' => $url);
$fp = fopen('results.json', 'w');
fwrite($fp, json_encode($array, JSON_PRETTY_PRINT));   // here it will print the array pretty
fclose($fp);

Espero que funcione para ti ...

Pasupathi Thangavel
fuente
6

Simplemente puede usar la función json_encode de php y guardar el archivo con funciones de manejo de archivos como fopen y fwrite .

Sarfraz
fuente
6

Si está sacando registros dinámicos, es mejor tener 1 archivo php que cree una representación json y no crear un archivo cada vez.

my_json.php

$array = array(
    'title' => $title,
    'url' => $url
);

echo stripslashes(json_encode($array)); 

Luego, en su secuencia de comandos, configure la ruta al archivo my_json.php

CyberJunkie
fuente
1
Cuando intento ejecutar esto usando getJason, obtengo un Recurso interpretado como Script pero transferido con el tipo de texto MIME / html en la consola.
codingbbq
@noobcode Para solucionarlo, creo que debería establecer un encabezado 'Content-Type' en su 'my_json.php'.
katalin_2003
5

Primero, debes decodificarlo:

$jsonString = file_get_contents('jsonFile.json');
$data = json_decode($jsonString, true);

Luego cambie los datos:

$data[0]['activity_name'] = "TENNIS";
// or if you want to change all entries with activity_code "1"
foreach ($data as $key => $entry) {
    if ($entry['activity_code'] == '1') {
        $data[$key]['activity_name'] = "TENNIS";
    }
}

Luego vuelva a codificarlo y guárdelo en el archivo:

$newJsonString = json_encode($data);
file_put_contents('jsonFile.json', $newJsonString);

Copiar

Darkcoder
fuente