PHP ile .json dosyası nasıl oluşturulur?


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

json.php kodu

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

?>

results.jsonDosya oluşturmam gerekiyor .


1
Sorumuzda biraz açıklama / bağlam olması en az kibarlıktır. Bu soru daha çok kimseye kapalı bir emir gibi görünüyor ve genel olarak yığın taşması topluluğu ..
Sl4rtib4rtf4st

Yanıtlar:


247

İşte örnek bir kod:

<?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
Bu kodu projemde kullandım. results.json dosyası yerel ana bilgisayarda iyi çalışır ve uzak sunucuda başarısız olur. Neden böyle olduğunu açıklayabilir misin ..
Vignesh Gopalakrishnan

4
Fwrite, sunucu ayarlarınızdan kapatılabilir
Chris

her ne kadar bu harika olsa da, şu anda PHP 5 kullandığımdan ve bu cevabın gönderildiği sırada mevcut olmadığından, ancak $ sonuç = satırından kurtulabilir ve while döngüsünüzün içinde sadece mysql_feth_array ($ sql) yapın

Lütfen 1. satırı $ sql olarak güncelleyin = "Gönderi sınırı 20'den * seçin"; , mysql_query () kaldır
Sachin Vairagi

6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- JSON'u biçimlendirmek için boşluk kullanır. Buradaki
Andrei Krasutski

49

Bunu kullan:

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

Komut dosyasını çalıştırmadan önce myfile.json dosyasını oluşturmanız gerekir.


Aslında yorum tarihinde, verileri kaydetmeden önce dosyayı oluşturmaya gerek yoktur. Yine de, kaydetme yolu boyunca, varsa, mevcut olmayan alt klasörleri oluşturmanız gerekse de. İşte size kolaylık olması açısından file_put_contents için resmi belge .
Valentine Shi

1
Evet, programlama dilleri gelişiyor. Mesaj cevabım 2017'de yayınlandı. 2017'de işe yarayan sadece olumsuz oy kullanan kod yerine bunu yapmanın güncellenmiş bir yolu olan yeni bir cevap göndermiş olmalısın
RileyManda

1
Yaptığın kesilmiş fotoğrafta değişiklik yok. file_put_contentsİlk yorumumda bahsettiğim şekilde çalışıyor.
Valentine Shi

30

Yankı yapmak yerine getirilen değerlerinizi bir diziye ekleyin.

Verileriniz ise , kullanın file_put_contents()ve json_encode($rows)bu dosyaya ekleyin $rows.


2
Cevabınızın en çok oylanandan önce gönderilmiş olduğunu görüyorum. Keşke bir örnek kod koymuş olsaydın, çok daha fazla oy alırdın.
Engin Yapıcı

7

İşte ben oluşturmak için basit Syntex belirtmiştik dosyayı json içine dizisi değeri ve baskı json oldukça biçimde dosyası.

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

Umarım işinize yarayacak ....




6

Dinamik kayıtlar çekiyorsanız, bir json temsili oluşturan ve her seferinde bir dosya oluşturmayan 1 php dosyasına sahip olmak daha iyidir.

my_json.php

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

echo stripslashes(json_encode($array)); 

Sonra komut dosyanızda dosyanın yolunu ayarlayın my_json.php


1
Bunu getJason kullanarak çalıştırmayı denediğimde, Resource komut dosyası olarak yorumlanıyor ancak konsolda MIME türü text / html ile aktarılıyor .
codingbbq

@noobcode Bunu düzeltmek için, 'my_json.php' dosyanıza bir 'Content-Type' başlığı ayarlamanız gerektiğini düşünüyorum.
katalin_2003

5

İlk önce, kodunu çözmeniz gerekir:

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

Ardından verileri değiştirin:

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

Ardından yeniden kodlayın ve tekrar dosyaya kaydedin:

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

kopya

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.