2010-03-18 18 views
89
CREATE TABLE Posts 
{ 
id INT PRIMARY KEY AUTO_INCREMENT, 
title VARCHAR(200), 
url VARCHAR(200) 
} 

código json.php¿Cómo generar un archivo .json con 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 para generar results.json archivo.

Respuesta

177

Aquí es un ejemplo de código:

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

Utilicé 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é tan ... –

+3

Fwrite podría desactivarse en la configuración de su servidor – Chris

+0

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 puede deshacerse de $ result = line y dentro su ciclo while solo hace el mysql_feth_array ($ sql) –

7

Usted puede simplemente utilizar json_encode función de php y guardar el archivo con las funciones de manejo de archivos tales como fopen y fwrite.

24

Inserte los valores obtenidos en una matriz en lugar de hacer eco.

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

+0

Veo que la respuesta ha sido publicada antes que la más votada. Si solo hubieras puesto un código de ejemplo, hubieras obtenido muchos más votos. –

3

Si usted está tirando de registros dinámicos que es mejor tener 1 archivo php que crea una representación JSON y no crea un archivo cada vez.

my_json.php

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

echo stripslashes(json_encode($array)); 

Luego, en su script establecer la ruta al archivo my_json.php

+1

Cuando intento ejecutar esto usando getJason, obtengo * Recurso interpretado como Script pero transferido con texto tipo MIME/html * en la consola. – noobcode

+0

@noobcode Para solucionarlo, creo que debe establecer un encabezado 'Content-Type' en su 'my_json.php'. –

17

Utilice esta:

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

funciona para mí.

3

Aquí he mencionado Syntex simple para crear archivo JSON e imprimir el valor de la matriz dentro del archivo JSON de manera bastante.

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

Esperamos que se trabaja para usted ....

0

En primer lugar, es necesario descodificarlo:

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

a continuación, cambiar 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 re -encógelo y guárdalo en el archivo:

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

copy