如何使用 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函数,并使用fopenfwrite等文件处理函数保存文件.

【讨论】:

【参考方案8】:

使用 PHP 的 json methods 创建 json,然后将其写入带有 fwrite 的文件。

【讨论】:

以上是关于如何使用 PHP 生成 .json 文件?的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?

如何在 chart.js 中使用 JSON 数据?

如何使用 PHP 循环遍历 JSON 数组

如何使用 PHP 解析 JSON 文件? [复制]

如何使用 mysql 本机 json 函数生成嵌套的 json 对象?

如何使用 PHP 解码带有注释的 JSON 文件? [复制]