如何用PHP生成.json文件?


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

Answers:


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 2012年

4
Fwrite可以在您的服务器设置中关闭
Chris

尽管这很好,但是也许是因为我现在正在使用PHP 5,但在发布此答案时尚不可用,但是您可以摆脱$ result =行,而在while循环中只需使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 '18年

49

用这个:

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

您必须在运行脚本之前创建myfile.json。


实际上,在评论日期,无需在保存数据之前创建文件。尽管您仍然必须沿保存路径创建不存在的子文件夹(如果有)。为了方便起见,这是file_put_contents官方文档
Valentine Shi

1
是的,编程语言在不断发展。我的答案发布于2017年。您应该发布具有更新方法的新答案,而不是仅仅使用2017
无效的

1
您给的狙击手没有任何变化。file_put_contents我在最初的评论中提到的方式就是这样。
Valentine Shi

30

将获取的值插入到数组中,而不是回显。

使用file_put_contents()并插入json_encode($rows)该文件(如果$rows是您的数据)。


2
我看到您的答案是在最不赞成的答案之前发布的。如果仅放置一些示例代码,您将获得更多的选票。
Engin Yapici 2015年

7

在这里,我提到了用于创建json文件并以漂亮的方式在json文件中打印数组值的简单syntex 。

$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

如果要提取动态记录,最好有1个php文件来创建json表示形式,而不是每次都创建一个文件。

my_json.php

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

echo stripslashes(json_encode($array)); 

然后在脚本中设置文件的路径 my_json.php


1
当我尝试使用getJason运行此程序时,我将资源解释为脚本,但在控制台中以MIME类型text / html进行了传输
codingbbq

@noobcode要解决此问题,我认为您应该在'my_json.php'中设置一个'Content-Type'标头。
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);

复制

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.