Como gerar o arquivo .json com PHP?

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

código 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 ']}';

?>

Eu tenho que gerar results.jsonarquivo.

Egglabs
fonte
1
Ter alguma explicação / contexto em nossa pergunta é, no mínimo, educado. Esta questão parece mais como uma ordem implícita para ninguém em particular e da comunidade de estouro de pilha em geral ..
Sl4rtib4rtf4st

Respostas:

247

Aqui está um código de exemplo:

<?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
fonte
1
Eu usei esse código no meu projeto. O arquivo results.json funciona bem no host local e falha no servidor remoto. Você pode explicar o porquê .. ..
Vignesh Gopalakrishnan
4
Fwrite poderia ser desligado nas configurações do servidor
Chris
Embora isso seja ótimo, talvez porque eu esteja usando o PHP 5 agora e não estava disponível no momento em que esta resposta foi publicada, mas você pode se livrar da linha $ result = e dentro do seu loop while, basta criar o mysql_feth_array ($ sql)
Atualize a 1ª linha para $ sql = "select * from Posts limit 20"; , remova mysql_query ()
Sachin Vairagi
6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- usa espaço em branco para formatar o JSON. Outras constantes aqui
Andrei Krasutski
49

Usa isto:

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

Você precisa criar o myfile.json antes de executar o script.

RileyManda
fonte
De fato, na data do comentário, não há necessidade de criar o arquivo antes de salvar os dados. Embora você ainda precise criar subpastas não existentes, se houver, ao longo do caminho de salvamento. Aqui está o documento oficial para file_put_contents apenas por conveniência.
Valentine Shi
1
Sim, linguagens de programação evolve.My resposta pós foi publicada em 2017.You deveria ter postado uma nova resposta com uma forma atualizada de fazê-lo em vez de apenas downvoted código que trabalhou em 2017
RileyManda
1
Não há alterações no snip que você deu. Do jeito file_put_contentsque eu mencionei no meu comentário inicial.
Valentine Shi
30

Insira seus valores buscados em uma matriz em vez de ecoar.

Use file_put_contents()e insira json_encode($rows)nesse arquivo, se $rowssão seus dados.

chelmertz
fonte
2
Vejo que sua resposta foi postada antes da mais votada. Se ao menos você tivesse colocado algum código de exemplo, teria recebido muito mais votos.
Engin Yapici
7

Aqui mencionei o syntex simples para criar arquivo json e imprimir o valor da matriz dentro do arquivo json de maneira bonita.

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

Espero que funcione para você ....

Pasupathi Thangavel
fonte
6

Você pode simplesmente usar a função json_encode do php e salvar arquivos com funções de manipulação de arquivos como fopen e fwrite .

Sarfraz
fonte
6

Se você estiver puxando registros dinâmicos, é melhor ter um arquivo php que crie uma representação json e não crie um arquivo a cada vez.

my_json.php

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

echo stripslashes(json_encode($array)); 

Em seu script, defina o caminho para o arquivo my_json.php

CyberJunkie
fonte
1
Quando tento executar isso usando getJason, recebo o recurso interpretado como script, mas transferido com o tipo MIME text / html no console.
Codigobbq
@noobcode Para corrigir isso, acho que você deve definir um cabeçalho 'Content-Type' no seu 'my_json.php'.
katalin_2003
5

Primeiro, você precisa decodificá-lo:

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

Então mude os dados:

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

Em seguida, recodifique-o e salve-o novamente no arquivo:

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

cópia de

Darkcoder
fonte