如何使用 PHP 生成 .json 文件?
Posted
技术标签:
【中文标题】如何使用 PHP 生成 .json 文件?【英文标题】:How to generate .json file with PHP? 【发布时间】:2011-01-28 21:42:07 【问题描述】: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】:使用这个:
$json_data = json_encode($posts);
file_put_contents('myfile.json', $json_data);
您可以在运行脚本之前创建 myfile.json。但如果您拥有完整的 sudo 权限(读/写权限(Mac 上的您),则不是强制性的。
这是一个工作示例:
<?php
// data stored in an array called posts
$posts = Array (
"0" => Array (
"id" => "01",
"title" => "Hello",
),
"1" => Array (
"id" => "02",
"title" => "Yoyo",
),
"2" => Array (
"id" => "03",
"title" => "I like Apples",
)
);
// encode array to json
$json = json_encode($posts);
$bytes = file_put_contents("myfile.json", $json); //generate json file
echo "Here is the myfile data $bytes.";
?>
【讨论】:
实际上在评论日期没有必要在保存数据之前创建文件。尽管您仍然必须沿保存路径创建不存在的子文件夹(如果有)。这里是official doc for file_put_contents,只是为了方便。 是的,编程语言在进化。我的帖子答案是在 2017 年发布的。你应该发布一个新的答案,其中包含更新的方法,而不是仅仅在 2017 年有效的代码 你给的截图没有变化。就像我在最初评论中提到的file_put_contents
的工作方式。
好的,谢谢,我对我的回答进行必要的更改。谢谢情人节【参考方案2】:
这里我提到了创建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);
希望它对你有用....
【讨论】:
【参考方案3】:这是一个示例代码:
<?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);
?>
【讨论】:
我在我的项目中使用了这个代码。 results.json 文件在本地主机上运行良好,在远程服务器上失败。你能解释一下为什么会这样吗.. Fwrite 可以在您的服务器设置中关闭 虽然这很好,可能是因为我现在使用的是 PHP 5,并且在发布此答案时它不可用,但您可以摆脱 $result= 行并在您的 while 循环中只需制作 mysql_feth_array($sql) 请将第一行更新为 $sql = "select * from Posts limit 20"; , 删除 mysql_query()fwrite($fp, json_encode($response,JSON_PRETTY_PRINT));
- 使用空格来格式化 JSON。其他常量here【参考方案4】:
首先,您需要对其进行解码:
$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);
copy
【讨论】:
【参考方案5】:如果您要提取动态记录,最好有 1 个创建 json 表示的 php 文件,而不是每次都创建一个文件。
my_json.php
$array = array(
'title' => $title,
'url' => $url
);
echo stripslashes(json_encode($array));
然后在你的脚本中设置文件my_json.php
的路径
【讨论】:
当我尝试使用 getJason 运行它时,我得到 Resource 被解释为脚本但在控制台中以 MIME 类型 text/html 传输。 @noobcode 要解决这个问题,我认为您应该在 'my_json.php' 中设置一个 'Content-Type' 标头。【参考方案6】:将获取的值插入数组而不是回显。
如果$rows
是您的数据,则使用file_put_contents()
并将json_encode($rows)
插入该文件。
【讨论】:
我看到您的答案是在最受好评的答案之前发布的。如果你放了一些示例代码,你会得到更多的票。【参考方案7】:您可以简单地使用php的json_encode函数,并使用fopen和fwrite等文件处理函数保存文件.
【讨论】:
【参考方案8】:使用 PHP 的 json methods 创建 json,然后将其写入带有 fwrite 的文件。
【讨论】:
以上是关于如何使用 PHP 生成 .json 文件?的主要内容,如果未能解决你的问题,请参考以下文章
PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?