Come generare un file .json con PHP?


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

codice 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 ']}';

?>

Devo generare un results.jsonfile.


1
Avere qualche spiegazione / contesto nella nostra domanda è per lo meno educato. Questa domanda sembra più un ordine implicito a nessuno in particolare e alla comunità di overflow dello stack in generale ..
Sl4rtib4rtf4st

Risposte:


247

Ecco un codice di esempio:

<?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
Ho usato questo codice nel mio progetto. Il file results.json funziona bene sull'host locale e non riesce sul server remoto. Puoi spiegare perché ...
Vignesh Gopalakrishnan,

4
Fwrite potrebbe essere disattivato nelle impostazioni del tuo server
Chris

anche se questo è fantastico forse perché sto usando PHP 5 ora e non era disponibile al momento in cui è stata pubblicata questa risposta ma puoi sbarazzarti della riga $ result = e all'interno del tuo ciclo while basta creare mysql_feth_array ($ sql)

Aggiorna la prima riga a $ sql = "seleziona * da Post limit 20"; , rimuovi mysql_query ()
Sachin Vairagi il

6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- utilizza gli spazi bianchi per formattare JSON. Altre costanti qui
Andrei Krasutski l'

49

Usa questo:

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

Devi creare myfile.json prima di eseguire lo script.


Infatti alla data del commento non è necessario creare il file prima di salvare i dati. Sebbene sia ancora necessario creare le sottocartelle inesistenti, se presenti, lungo il percorso di salvataggio. Ecco il documento ufficiale per file_put_contents solo per comodità.
Valentine Shi,

1
Sì, i linguaggi di programmazione si evolvono. La mia risposta al post è stata pubblicata nel 2017. Avresti dovuto pubblicare una nuova risposta con un modo aggiornato di farlo invece di un codice di
downgrade

1
Non ci sono cambiamenti nello snipped che hai dato. Proprio il modo in file_put_contentsopere che ho detto nel mio commento iniziale.
Valentine Shi,

30

Inserisci i valori recuperati in un array anziché fare l'eco.

Usa file_put_contents()e inserisci json_encode($rows)in quel file, se $rowssono i tuoi dati.


2
Vedo che la tua risposta è stata pubblicata prima di quella più votata. Se solo tu avessi inserito un codice di esempio, avresti ottenuto molti più voti.
Engin Yapici,

7

Qui ho citato la semplice sintassi per creare il file json e stampare il valore dell'array all'interno del file json in modo carino.

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

Spero che funzioni per te ....




6

Se stai estraendo record dinamici è meglio avere 1 file php che crea una rappresentazione json e non crea un file ogni volta.

my_json.php

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

echo stripslashes(json_encode($array)); 

Quindi, nel tuo script, imposta il percorso del file my_json.php


1
Quando provo a eseguirlo usando getJason, ottengo la risorsa interpretata come script ma trasferita con il tipo MIME text / html nella console.
codingbbq

@noobcode Per risolvere questo problema, penso che dovresti impostare un'intestazione "Content-Type" nel tuo "my_json.php".
Katalin_2003,

5

Innanzitutto, devi decodificarlo:

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

Quindi modificare i dati:

$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";
    }
}

Quindi ricodificarlo e salvarlo nuovamente nel file:

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

copia

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.