Làm cách nào để tạo tệp .json bằng PHP?


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

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

?>

Tôi phải tạo results.jsontập tin.


1
Có một số lời giải thích / bối cảnh trong câu hỏi của chúng tôi là rất ít lịch sự. Câu hỏi này có vẻ giống như một mệnh lệnh ngầm đối với không ai nói riêng và cộng đồng tràn stack nói chung ..
Sl4rtib4rtf4st

Câu trả lời:


246

Đây là một mã mẫu:

<?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
Tôi đã sử dụng mã này trong dự án của tôi. tệp results.json hoạt động tốt trên máy chủ cục bộ và bị lỗi trên máy chủ từ xa. Bạn có thể giải thích lý do tại sao không ..
Vignesh Gopalakrishnan

4
Fwrite có thể bị tắt trong cài đặt máy chủ của bạn
Chris

mặc dù điều này rất tốt vì có thể tôi đang sử dụng PHP 5 và nó không có sẵn tại thời điểm câu trả lời này được đăng nhưng bạn có thể thoát khỏi dòng $ result = và trong vòng lặp while của bạn chỉ cần tạo mysql_feth_array ($ sql)

Vui lòng cập nhật dòng 1 thành $ sql = "select * từ Giới hạn bài viết 20"; , xóa mysql_query ()
Sachin Vairagi

6
fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));- sử dụng khoảng trắng để định dạng JSON. Các hằng số khác ở đây
Andrei Krasnutski

49

Dùng cái này:

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

Bạn phải tạo myfile.json trước khi chạy tập lệnh.


Trong thực tế tại ngày bình luận không cần phải tạo tệp trước khi lưu dữ liệu. Mặc dù bạn vẫn phải tạo các thư mục con không tồn tại, nếu có, dọc theo đường dẫn lưu. Đây là tài liệu chính thức cho file_put_contents chỉ để thuận tiện.
Valentine Shi

1
Có, ngôn ngữ lập trình phát triển. Câu trả lời của bài đăng của tôi đã được đăng vào năm 2017. Bạn nên đăng một câu trả lời mới với cách thức cập nhật thay vì chỉ viết mã giảm hiệu quả trong năm 2017
RileyManda

1
Không có thay đổi cho snipped bạn đã đưa ra. Chỉ là cách file_put_contentslàm việc mà tôi đã đề cập trong bình luận ban đầu của tôi.
Valentine Shi

30

Chèn các giá trị được tìm nạp của bạn vào một mảng thay vì lặp lại.

Sử dụng file_put_contents()và chèn json_encode($rows)vào tập tin đó, nếu $rowslà dữ liệu của bạn.


2
Tôi thấy câu trả lời của bạn đã được đăng trước khi câu trả lời được đánh giá cao nhất. Nếu chỉ bạn đã đặt một số mã ví dụ, bạn sẽ nhận được nhiều phiếu bầu hơn.
Engin Yapici

7

Ở đây tôi đã đề cập đến cú pháp đơn giản để tạo tệp json và in giá trị mảng bên trong tệp json theo cách khá hay.

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

Hy vọng nó sẽ làm việc cho bạn ....




6

Nếu bạn đang kéo các bản ghi động, tốt hơn là có 1 tệp php tạo đại diện json và không tạo tệp mỗi lần.

my_json.php

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

echo stripslashes(json_encode($array)); 

Sau đó, trong tập lệnh của bạn đặt đường dẫn đến tệp my_json.php


1
Khi tôi cố chạy cái này bằng getJason, tôi nhận được Resource được hiểu là Script nhưng được chuyển với loại văn bản / html MIME trong bảng điều khiển.
mã hóabbq

@noobcode Để khắc phục điều đó, tôi nghĩ bạn nên đặt tiêu đề 'Loại nội dung' trong 'my_json.php' của bạn.
katalin_2003

5

Đầu tiên, bạn cần giải mã nó:

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

Sau đó thay đổi dữ liệu:

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

Sau đó mã hóa lại và lưu lại trong tệp:

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

bản sao

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.