¿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.


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);


?> 

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.


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.


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 ...




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


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.