Wie generiere ich eine JSON-Datei mit PHP?

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

json.php Code

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

?>

Ich muss eine results.jsonDatei generieren .

Egglabs
quelle
1
Eine Erklärung / einen Kontext in unserer Frage zu haben, ist im geringsten höflich. Diese Frage scheint für niemanden und die Stack-Overflow-Community im Allgemeinen eher eine implizite Reihenfolge zu sein.
Sl4rtib4rtf4st

Antworten:

246

Hier ist ein Beispielcode:

<?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
quelle
1
Ich habe diesen Code in meinem Projekt verwendet. Die Datei results.json funktioniert gut auf dem lokalen Host und schlägt auf dem Remote-Server fehl. Können Sie erklären, warum so ..
Vignesh Gopalakrishnan
4
Fwrite könnte in Ihren Servereinstellungen deaktiviert sein
Chris
Obwohl dies vielleicht großartig ist, weil ich jetzt PHP 5 verwende und es zum Zeitpunkt der Veröffentlichung dieser Antwort nicht verfügbar war, können Sie die Zeile $ result = entfernen und in Ihrer while-Schleife einfach mysql_feth_array ($ sql) erstellen.
Bitte aktualisieren Sie die erste Zeile auf $ sql = "select * from Posts limit 20"; , entfernen Sie mysql_query ()
Sachin Vairagi
6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- verwendet Leerzeichen zum Formatieren des JSON. Andere Konstanten hier
Andrei Krasutski
48

Benutze das:

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

Sie müssen die Datei myfile.json erstellen, bevor Sie das Skript ausführen.

RileyManda
quelle
Zum Zeitpunkt des Kommentars muss die Datei vor dem Speichern der Daten nicht erstellt werden. Sie müssen jedoch noch die nicht vorhandenen Unterordner (falls vorhanden) entlang des Speicherpfads erstellen. Hier ist das offizielle Dokument für file_put_contents .
Valentine Shi
1
Ja, Programmiersprachen entwickeln sich weiter. Meine Antwort wurde 2017 veröffentlicht. Sie sollten eine neue Antwort mit einer aktualisierten Vorgehensweise veröffentlicht haben, anstatt nur den Code herunterzustimmen, der 2017
funktioniert hat
1
Es gibt keine Änderung an dem Ausschnitt, den Sie gegeben haben. Genau so file_put_contentsfunktioniert es, wie ich es in meinem ersten Kommentar erwähnt habe.
Valentine Shi
30

Fügen Sie Ihre abgerufenen Werte in ein Array ein, anstatt sie wiederzugeben.

Verwenden Sie diese Datei file_put_contents()und fügen Sie sie json_encode($rows)in diese Datei ein, wenn dies $rowsIhre Daten sind.

Chelmertz
quelle
2
Ich sehe, dass Ihre Antwort vor der am besten bewerteten veröffentlicht wurde. Wenn Sie nur einen Beispielcode eingegeben hätten, hätten Sie viel mehr Stimmen erhalten.
Engin Yapici
7

Hier habe ich den einfachen Syntex zum Erstellen einer JSON- Datei erwähnt und den Array-Wert in der JSON- Datei auf hübsche Weise gedruckt .

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

Hoffe es wird für dich funktionieren ....

Pasupathi Thangavel
quelle
6

Verwenden Sie die json-Methoden von PHP , um den json zu erstellen, und schreiben Sie ihn dann mit fwrite in eine Datei .

QUentin
quelle
6

Wenn Sie dynamische Datensätze abrufen, ist es besser, 1 PHP-Datei zu haben, die eine JSON-Darstellung erstellt, und nicht jedes Mal eine Datei zu erstellen.

my_json.php

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

echo stripslashes(json_encode($array)); 

Legen Sie dann in Ihrem Skript den Pfad zur Datei fest my_json.php

CyberJunkie
quelle
1
Wenn ich versuche, dies mit getJason auszuführen, wird die Ressource als Skript interpretiert, aber mit dem MIME-Typ text / html in der Konsole übertragen.
Codingbbq
@noobcode Um dies zu beheben, sollten Sie in Ihrer 'my_json.php' einen 'Content-Type'-Header setzen.
katalin_2003
5

Zuerst müssen Sie es dekodieren:

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

Dann ändern Sie die Daten:

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

Codieren Sie es dann neu und speichern Sie es wieder in der Datei:

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

Kopieren

Darkcoder
quelle