0

我正在尝试使用 php 服务器从反编译的 Android 应用程序中读取数据。我曾经wireshark了解应用程序发送哪些类型的数据,结果是:

{"initType":"第一次","参数":true,"details":................}

我试图捕获这些数据并将它们插入到具有此 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);  
?> 

该文件已正确生成,但为空。错误是什么?

4

2 回答 2

0

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

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

或者:

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

更新(根据您的评论):

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

于 2013-01-03T16:45:56.390 回答
0

根本不要解码 json - 这只会带来尝试序列化 burmat 在他的回答中提到的数组的问题。

立即将 json 内容写入文件:

fwrite($file_handle, $json);

此外,虽然我不是 PHP 专家,但您似乎错误地访问了 post 请求的正文。请参考以下帖子

于 2013-01-03T16:47:14.780 回答