จะสร้างไฟล์. json ด้วย PHP ได้อย่างไร?


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

รหัส 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 ']}';

?>

ฉันต้องสร้างresults.jsonไฟล์


1
การมีคำอธิบาย / บริบทในคำถามของเรานั้นสุภาพน้อยที่สุด คำถามนี้ดูเหมือนจะเป็นการสั่งโดยปริยายสำหรับไม่มีใครเป็นพิเศษและชุมชนสแตกล้นโดยทั่วไป ..
Sl4rtib4rtf4st

คำตอบ:


247

นี่คือโค้ดตัวอย่าง:

<?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
ฉันใช้รหัสนี้ในโครงการของฉัน ไฟล์ results.json ทำงานได้ดีบนโลคัลโฮสต์และล้มเหลวบนเซิร์ฟเวอร์ระยะไกล อธิบายได้ไหมว่าทำไม ..
Vignesh Gopalakrishnan

4
Fwrite สามารถปิดได้ในการตั้งค่าเซิร์ฟเวอร์ของคุณ
คริส

แม้ว่านี่จะดีมากอาจเป็นเพราะฉันใช้ PHP 5 ในขณะนี้และไม่สามารถใช้งานได้ในขณะที่คำตอบนี้ถูกโพสต์ แต่คุณสามารถกำจัด $ result = line และใน while loop ของคุณเพียงแค่สร้าง mysql_feth_array ($ sql)

โปรดอัปเดตบรรทัดแรกเป็น $ sql = "select * from Posts limit 20"; , ลบ mysql_query ()
Sachin Vairagi

6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- ใช้ช่องว่างเพื่อจัดรูปแบบ JSON ค่าคงที่อื่น ๆที่นี่
Andrei Krasutski

49

ใช้สิ่งนี้:

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

คุณต้องสร้าง myfile.json ก่อนที่คุณจะรันสคริปต์


ในความเป็นจริงในวันที่แสดงความคิดเห็นไม่จำเป็นต้องสร้างไฟล์ก่อนบันทึกข้อมูล แม้ว่าคุณจะยังคงต้องสร้างโฟลเดอร์ย่อยที่ไม่มีอยู่ตามเส้นทางการบันทึก นี่คือเอกสารอย่างเป็นทางการสำหรับ file_put_contentsเพื่อความสะดวก
วาเลนไทน์ชิ

1
ใช่ภาษาการเขียนโปรแกรมมีการพัฒนาขึ้นคำตอบโพสต์ของฉันถูกโพสต์ในปี 2560 คุณควรจะโพสต์คำตอบใหม่พร้อมวิธีการปรับปรุงใหม่แทนการลดรหัสที่ใช้งานได้ในปี 2017
RileyManda

1
ไม่มีการเปลี่ยนแปลงกับสนิปที่คุณให้ วิธีการfile_put_contentsทำงานที่ฉันกล่าวถึงในความคิดเห็นเริ่มต้นของฉัน
วาเลนไทน์ชิ

30

ใส่ค่าที่ดึงเข้ามาในอาร์เรย์แทนการสะท้อน

ใช้file_put_contents()และแทรกjson_encode($rows)ลงในไฟล์นั้นหาก$rowsเป็นข้อมูลของคุณ


2
ฉันเห็นว่าคำตอบของคุณถูกโพสต์ก่อนที่จะมีการโหวตมากที่สุด หากเพียงคุณใส่โค้ดตัวอย่างคุณจะได้รับคะแนนโหวตเพิ่มขึ้นอีกมากมาย
Engin Yapici

7

ที่นี่ฉันได้กล่าวถึง syntex อย่างง่ายสำหรับสร้างไฟล์ jsonและพิมพ์ค่าอาร์เรย์ภายในไฟล์jsonอย่างสวยงาม

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

หวังว่าจะได้ผลสำหรับคุณ ....



6

คุณก็สามารถใช้json_encodeการทำงานของ PHP และบันทึกไฟล์ที่มีฟังก์ชั่นการจัดการไฟล์เช่นfopenและfwrite


6

หากคุณกำลังดึงไดนามิกเร็กคอร์ดควรมีไฟล์ php 1 ไฟล์ที่สร้างการแสดง json และไม่สร้างไฟล์ในแต่ละครั้ง

my_json.php

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

echo stripslashes(json_encode($array)); 

จากนั้นในสคริปต์ของคุณกำหนดเส้นทางไปยังไฟล์ my_json.php


1
เมื่อฉันพยายามเรียกใช้สิ่งนี้โดยใช้ getJason ฉันได้รับทรัพยากรที่ตีความเป็นสคริปต์ แต่ถ่ายโอนด้วยข้อความประเภท MIME / htmlในคอนโซล
codingbbq

@noobcode ในการแก้ไขฉันคิดว่าคุณควรตั้งค่าส่วนหัว "Content-Type" ใน "my_json.php" ของคุณ
katalin_2003

5

ขั้นแรกคุณต้องถอดรหัส:

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

จากนั้นเปลี่ยนข้อมูล:

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

จากนั้นเข้ารหัสใหม่และบันทึกกลับในไฟล์:

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

สำเนา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.