2011-12-22 128 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