2011-12-22 88 views
1

我正在尝试在Codeigniter中使用Transendit.com服务。目前我正在尝试构建通知页面。我可以接收POST请求(采用JSON格式)并将其写入文件。奇怪的是我无法将JSON对象解析为一个PHP数组,以便我可以从中提取相关数据。当我在写入文件之前解码它时,文件是空的。如果我不把JSON代码写入文件。如何解析JSON对象?失败

这是我的控制器代码:

$result = $_POST['transloadit']; 

$result = json_decode($result); // This produces empty content in file 

$this->load->helper('file'); 

if (! write_file('./files/myfile.php', $result)) 
{ 
echo 'Unable to write the file'; 
} else { 
echo 'File written!'; 
} 

发送到该页面可以在这里找到的JSON对象:http://pastie.org/3056727

+0

它只是一个json对象,直到你解码它,然后它是一个PHP stdclass对象。 – 2011-12-22 11:13:57

+0

我的主要目标是从这个JSON对象中提取数据并将其写入数据库。我怎样才能做到这一点? (写入文件只是为了让我看到输出)。 – 2011-12-22 11:20:02

回答

3

你想写一个stdClass的对象(解码JSON)直接写入文件 - 这是行不通的。

不解码$result - 使用原始json字符串写入文件。此外,.json是有效的文件格式 - 考虑使用它而不是.php(可能更有意义)。

$result = $_POST['transloadit']; 
$this->load->helper('file'); 

// You can test for valid json like this: 
$is_valid_json = json_decode($result) !== NULL; 

if (! write_file('./files/myfile.json', $result)) { 
    echo 'Unable to write the file'; 
} 
else { 
    echo 'File written!'; 
} 
+0

好的。但是我将它写入文件的原因只是为了能够“看到”结果。我正在处理的页面是“隐藏”页面,不显示任何信息。它将用来自JSON对象的信息更新数据库。我的主要目标是从JSON对象中提取相关数据。我怎样才能做到这一点?谢谢! – 2011-12-22 11:19:14

+0

您可以像访问其他对象一样访问它。假设'$ encoded = json_decode($ result)'。所以'$ decode-> message'应该返回'“程序集已经成功完成了。”'因为你实际上不仅仅有键/值对,你需要弄清楚*你想如何存储它数据库。我不能为你做出这个决定,也没有必要的信息去做。 – 2011-12-22 11:21:50

+0

我不知道为什么它不适合你。在全面爆发时打开错误报告,并使用像var_dump()这样的基本调试技术。对我来说在这里工作得很好:http://codepad.org/V9ygBWgQ – 2011-12-22 11:28:04