Cakephp读取和写入json文件。

Cakephp读取和写入json文件。,php,cakephp,cakephp-1.3,json,Php,Cakephp,Cakephp 1.3,Json,我是cakephp新手。我正在尝试将json输出保存为webroot中的文件。我还想将文件读入数组 我知道我们可以使用json_encode($array)将数组输出为json对象。但我一直在创建json文件并将其读入数组 谢谢你的帮助 //write $json = '{"key":"value"}'; $file = new File('/path/to/file', true); $file->write($json); //read $file = new File('/path/

我是cakephp新手。我正在尝试将json输出保存为webroot中的文件。我还想将文件读入数组

我知道我们可以使用json_encode($array)将数组输出为json对象。但我一直在创建json文件并将其读入数组

谢谢你的帮助

//write
$json = '{"key":"value"}';
$file = new File('/path/to/file', true);
$file->write($json);
//read
$file = new File('/path/to/file');
$json = $file->read(true, 'r');
$json2array = json_decode($json);
注意:此代码属于模型或控制器中的方法

尽管塞特弗的回答在技术上是正确的,但并不十分“卡基”

具体来说,对于CakePHP,我将执行以下操作:

$json = '{"key":"value"}';
$json2 = json_encode(array("a" => 1, "b" => 2));
$path = APP . '[YOUR FOLDER NAME]' . DS . 'json';
$path2 = APP . '[YOUR FOLDER NAME]' . DS . 'json2';
$jsonFromFile;
$json2FromFile;

//write
if(!file_exists($path))
    file_put_contents($path, $json);

if(!file_exists($path2))
    file_put_contents($path2, $json2);

//read
if(!file_exists($path))
    $jsonFromFile = file_get_contents($path, true);
if(!file_exists($path2))
    $json2FromFile = file_get_contents($path2, true);
说明:

  • $json是一个标准的预先编写的json字符串,这里没有混淆
  • $json2向您展示了一个示例,说明如何将json字符串编码和数组(或对象)以用于存储目的
  • $path使用了一些CakePHP常量。“APP”为您提供应用程序文件夹的可解析路径&“DS”,用作系统安全目录分隔符
  • 然后我们检查以确保我们的文件不存在,在这一点上,我们使用“file\u put\u contents”方法来编写我们的文件

愉快的编码。

您确定要将文件保存在webroot中,以便公众可以查看吗?下面的答案显示了json_encode和json_decode的使用,我认为这回答了您的问题。@Andy我知道它是可用的,但我不确定如何将它存储在webroot之外。我可以将其存储在webroot之外吗。谢谢你的帮助。嗨,当然可以。根据您是否计划保留它,您可以将它存储在app/tmp/目录的子目录中。而不是使用WebOOT作为您的基本目录考虑使用TMP或类似的东西(签出)。只需确保chmod目录以允许Apache用户rw访问即可。file\u get\u contents和file\u put\u contents不需要通过URL访问文件,可以使用路径名(),谢谢您的回答。。你让它看起来很简单。。我感谢你的帮助。我想知道我们是否可以将文件保存在webroot之外。谢谢。你可以将文件保存在php的根文件夹中的任何地方。问题是如何读取平面json文件的内容。此外,如果您的答案是“cakey”,那么应该包括在控制器或数据源中执行此操作的建议。OP没有提供他在何处执行此逻辑的上下文,所以为什么要限制我的答案?我的回答中的“cakey”方面是利用Cake提供的常量来确保应用程序是从一个环境到另一个环境的门户,与您的配置无关。你说得对,我错过了答案的阅读部分。我会更新的。酷。一个问题是,太多的“CakePhp开发人员”将这样的代码直接放入视图文件中,或者跨多个控制器方法复制。不暗示蛋糕标准的解决方案并不是真正描述蛋糕解决方案,而是通用解决方案(在本例中使用蛋糕常数)。让我们把这个放到床上。