2013-05-30 115 views
0

我想下面的代码来接收JSON。但是解码不会给出结果。它适用于具有转义斜线的相同字符串的副本。PHP json_decode不起作用

<?php 
$input = file_get_contents('php://input'); 
logToFile("post.txt",$input); 
#Output: {"id":"id1","model":"model1","version":"v1","software":["s1","s2","s3"]} 

$data = json_decode($input,true); 
logToFile("post.txt",$data['version']); 
#Output:Empty result 

### Works 
$data1 = json_decode("{\"id\":\"id1\",\"model\":\"model1\",\"version\":\"v1\",\"software\":[\"s1\",\"s2\",\"s3\"]}",true); 
logToFile("post.txt",$data1['version']); 
#Output:v1 

function logToFile($filename,$msg) 
{ 
    $fd=fopen($filename,"a"); 
    $str="[".date("Y/m/d h:i:s")."]".$msg; 
    fwrite($fd,$str."\n"); 
    fclose($fd); 
} 
?> 

我使用PHP 5.4。所以这在魔术引号中不是问题。任何帮助?

+0

什么是'var_dump($ data)'? – kevinamadeus

+0

'$ input'是什么? –

+2

尝试在json_decode之后调用'echo json_last_error_msg()'。 – Orangepill

回答

0

我不认为问题是与json_decode。

$input = '{"id":"id1","model":"model1","version":"v1","software":["s1","s2","s3"]}'; 
$data = json_decode($input,true); 
echo $data['version']; 

工作正常。

所以,如果你去:

echo "<pre>"; 
print_r($input); 
echo "</pre>"; 

后你从文件中的$输入。它看起来好吗?

+0

在文件中没问题。但是,当我检查var_dump($ input)时,它就像是软件+ json字符串。额外的软件条款是由客户发送的。它被删除,现在它工作正常。 – Suranga