2013-01-03 228 views
0

我试图从一个PHP服务器的Android反编译应用程序读取数据。我用wireshark了解应用程序发送的数据类型,其结果是:从Android使用php读取json数据

{“initType”:“第一时间”,“参数”:真正的“细节”:...... ..........}

我试图捕捉到了这个数据,并在此PHP代码文件中插入它们:正确生成

<?php 
$json = $_POST["initType"]; 
$decoded = json_decode($json, TRUE); 
if ($decoded === FALSE) { 
    throw new Exception('Bad JSON format.'); 
} 
$file_handle = fopen('tmp.json', 'w'); 
fwrite($file_handle, $decoded); 
fclose($file_handle); 
?> 

的文件,但它是空的。什么是错误?

+0

为什么你解码,然后序列化?你不能直接写'$ json'吗? –

+2

'json_decode()'将它变成一个数组。你应该'fwrite($ file_handle,$ json);'而不是。 – alizahid

+0

什么是“反编译的Android应用程序”? – njzk2

回答

0

由于$decoded是一个数组,因此使用循环将其写入文件或将编码的JSON写入文件($json)。尝试使用这样的:

fwrite('tmp.json', print_r($decoded, TRUE)); 

或:

file_put_contents('tmp.json', print_r($decoded, TRUE)); 

更新(根据您的评论):

如果你运行一个print_r($decoded)和不打印输出,还有一个问题与解码传入的JSON对象的进程。我建议检查它以确保格式正确。 JSON格式是一项严格的业务,如果缺少双引号或括号,将会停止您的最终目标。首先回显$json$_POST["initType"])并将格式与在线发布的示例(仅Google“json格式”)进行比较。我可以告诉你,突出的一件事是:"parameters":true(从上面的例子)。我有一个强烈的怀疑关键true应该用双引号。如果您肯定JSON变量在语法上是正确的,我认为我不会再有任何帮助。使用json_decode()来产生一个数组,使其非常直接,一旦你做对了。

+0

我试过fwrite($ file_handle,$ json)和fwrite('tmp.json',print_r($ decode,TRUE)),但结果没有改变。只有文件生成的第一种情况,所以我认为这意味着'$ json'不包含任何数据。其他建议? – hasmet

+0

使用print_r($ decode)来确保它被正确解码并转储数组的结果 – burmat

+0

我使用print_r($译码)但结果不会改变 – hasmet

0

根本不要对json进行解码 - 这仅仅会导致尝试序列化他的答案中提到的burmat数组的问题。

写入该文件的内容的JSON马上:

fwrite($file_handle, $json); 

此外,虽然我不是PHP专家看来你访问POST请求的主体错误。请参阅following post

+0

我试过了:fwrite($ file_handle,$ json);和fwrite('tmp.json',print_r($ decode,TRUE));但结果不会改变。只有文件生成的第一种情况,所以我认为这意味着'$ json'不包含任何数据。其他建议? – hasmet

+0

@hasmet:你见过我的编辑内容吗?你应该如何阅读帖子要求? –