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

json.php CodeWie generiere ich .json Datei mit 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 ']}'; 

?> 

Ich habe results.json Datei zu generieren.

Antwort

177

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


?> 
+1

Ich habe diesen Code in meinem Projekt verwendet. results.json-Datei funktioniert gut auf dem lokalen Host und schlägt auf dem Remoteserver fehl. Kannst du erklären warum ... –

+3

Fwrite könnte in Ihren Servereinstellungen ausgeschaltet werden – Chris

+0

obwohl das ist toll vielleicht, weil ich PHP 5 jetzt benutze und es war nicht verfügbar zum Zeitpunkt, als diese Antwort veröffentlicht wurde, aber Sie können die $ result = line und inside loswerden Ihre while-Schleife machen Sie nur die mysql_feth_array ($ sql) –

24

Fügen Sie die abgerufenen Werte in ein Array ein, anstatt zu wiederholen.

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

+0

Ich sehe Ihre Antwort wurde vor der am meisten uploged eins geschrieben. Hättest du nur einen Beispielcode eingegeben, hättest du viel mehr Stimmen bekommen. –

3

Wenn Sie dynamische Aufzeichnungen ziehen sind, es ist besser 1 PHP-Datei zu haben, die eine json Darstellung erstellt und eine Datei jedes Mal nicht erstellen.

my_json.php

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

echo stripslashes(json_encode($array)); 

Dann in Ihrem Skript den Pfad zum my_json.php

+1

Wenn ich versuche, dies mit getJason auszuführen, bekomme ich * Ressource als Skript interpretiert, aber mit MIME Typ Text übertragen/html * in der Konsole. – noobcode

+0

@noobcode Um das zu beheben, sollten Sie einen 'Content-Type'-Header in Ihrer' my_json.php 'setzen. –

17

Verwenden dieser Datei: für mich

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

funktioniert.

3

Hier habe ich die einfache syntex erwähnt für JSON-Datei erstellen und den Array-Wert innerhalb der json Datei in ziemlich Weise drucken.

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

hoffen, dass es für Sie arbeitet ....

0

Zuerst müssen Sie sie entschlüsseln:

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

dann die Daten ändern:

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

Dann wieder -kodieren Sie es und speichern Sie es wieder in der Datei:

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

copy