Comment générer un fichier .json avec PHP?

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

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

?>

Je dois générer un results.jsonfichier.

Egglabs
la source
1
Avoir une explication / un contexte dans notre question est pour le moins poli. Cette question ressemble plus à un ordre implicite pour personne en particulier et pour la communauté de débordement de pile en général.
Sl4rtib4rtf4st

Réponses:

247

Voici un exemple de code:

<?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
la source
1
J'ai utilisé ce code sur mon projet. Le fichier results.json fonctionne bien sur l'hôte local et échoue sur le serveur distant. Pouvez-vous expliquer pourquoi…
Vignesh Gopalakrishnan
4
Fwrite pourrait être désactivé dans les paramètres de votre serveur
Chris
bien que ce soit génial peut-être parce que j'utilise PHP 5 maintenant et qu'il n'était pas disponible au moment où cette réponse a été publiée, mais vous pouvez vous débarrasser de la ligne $ result = et à l'intérieur de votre boucle while, créez simplement le mysql_feth_array ($ sql)
Veuillez mettre à jour la 1ère ligne en $ sql = "select * from Posts limit 20"; , supprimer mysql_query ()
Sachin Vairagi
6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- utilise des espaces pour formater le JSON. Autres constantes ici
Andrei Krasutski
49

Utilisez ceci:

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

Vous devez créer myfile.json avant d'exécuter le script.

RileyManda
la source
En fait, à la date du commentaire, il n'est pas nécessaire de créer le fichier avant d'enregistrer les données. Cependant, vous devez toujours créer les sous-dossiers non existants, le cas échéant, le long du chemin d'enregistrement. Voici la documentation officielle de file_put_contents juste pour plus de commodité.
Valentine Shi
1
Oui, les langages de programmation évoluent.Ma réponse a été publiée en 2017.Vous auriez dû publier une nouvelle réponse avec une façon mise à jour de le faire au lieu de simplement voter contre le code qui a fonctionné en 2017
RileyManda
1
Il n'y a pas de changement au snipped que vous avez donné Juste la façon dont file_put_contentsfonctionne que j'ai mentionné dans mon commentaire initial.
Valentine Shi
30

Insérez vos valeurs récupérées dans un tableau au lieu de faire écho.

Utilisez file_put_contents()et insérez json_encode($rows)dans ce fichier, si $rowsvos données sont.

Chelmertz
la source
2
Je vois que votre réponse a été publiée avant la plus votée. Si seulement vous aviez mis un exemple de code, vous auriez obtenu beaucoup plus de votes.
Engin Yapici
7

Ici, j'ai mentionné le syntex simple pour créer un fichier json et imprimer la valeur du tableau dans le fichier json de manière jolie.

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

J'espère que cela fonctionnera pour vous ....

Pasupathi Thangavel
la source
6

Vous pouvez simplement utiliser la fonction json_encode de php et enregistrer le fichier avec des fonctions de gestion de fichier telles que fopen et fwrite .

Sarfraz
la source
6

Si vous tirez des enregistrements dynamiques, il est préférable d'avoir 1 fichier php qui crée une représentation json et de ne pas créer de fichier à chaque fois.

my_json.php

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

echo stripslashes(json_encode($array)); 

Ensuite, dans votre script, définissez le chemin d'accès au fichier my_json.php

CyberJunkie
la source
1
Quand j'essaye d'exécuter ceci en utilisant getJason, j'obtiens la ressource interprétée comme script mais transférée avec le texte de type MIME / html dans la console.
codingbbq
@noobcode Pour résoudre ce problème, je pense que vous devriez définir un en-tête 'Content-Type' dans votre 'my_json.php'.
katalin_2003
5

Tout d'abord, vous devez le décoder:

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

Puis modifiez les données:

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

Puis ré-encodez-le et enregistrez-le dans le fichier:

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

copie

Darkcoder
la source