2012-08-08 22 views
0

我有从java类返回的以下json。我可以得到这个与JS一起工作。但是,当在php中使用json解码时,它显然会中断,因为我确信我需要使用regexp来正确解析它。有任何想法吗?用于java的PHP json解码返回的转义json

{"return":"{\"response\": {\n \"header\": {\"status\": \"SUCCESS\"},\n \"table\": {\"rows\": {\"row\": {\"category\": [ {\n \"id\": 1,\n \"name\": \"myApp\",\n \"fa\": [\n {\n \"id\": \"370\",\n \"FieldsAllowed\": \"true\",\n \"systemType\": \"CRM GT\",\n \"cachable\": \"false\",\n \"description\": \"Display Activities\",\n \"faId\": \"100000044\",\n }]}}}\n}}"} 
+0

不,你可能不需要正则表达式。只有一个编码的字符串,而不是子数组。有人在编码时犯了最初的错误。 – mario 2012-08-08 20:13:04

+0

这是jsonception吗? – 2012-08-08 20:30:10

+0

不幸的是,这是我坚持,任何想法? – 2012-08-08 20:36:44

回答

0

可以得到数据既可以作为一个关联数组或一个对象,

$jsonString = '{"return":"{\"response\": {\n \"header\": {\"status\": \"SUCCESS\"},\n \"table\": {\"rows\": {\"row\": {\"category\": [ {\n \"id\": 1,\n \"name\": \"myApp\",\n \"fa\": [\n {\n \"id\": \"370\",\n \"FieldsAllowed\": \"true\",\n \"systemType\": \"CRM GT\",\n \"cachable\": \"false\",\n \"description\": \"Display Activities\",\n \"faId\": \"100000044\",\n }]}}}\n}}"}'; 

1)获取响应作为一个关联数组,

$decodedResultsAsArray = json_decode($jsonString,true); 
$data = $decodedResultsAsArray['return']; 
print_r($data); 

2)获取响应作为对象,

$decodedResultsAsObject = json_decode($jsonString); 
$data = $decodedResultsAsObject->return; 
print_r($data); 

如果你想看看,还有几个其他选项与json_decode函数,http://php.net/json_decode

0

应用json_decode()两次得到包含数组(“响应”)。

// This gets you the inner string 
$json = json_decode($input); 

// This unfolds the contained structure 
$data = json_decode($data->return); 

正如你在所有情况下数据编组两次时所做的一样。

+0

好的,我尝试了以下几种方法,但没有去?即时通讯仍然重新学习PHP所以我想我不明白如何创建$数据变量? //执行后 $ result = curl_exec($ ch); //关闭连接 curl_close($ ch); //打印($ AgentString); $ json = json_decode($ result); //展开包含的结构 $ data = json_decode($ json-> return); 打印($ data); – 2012-08-08 20:44:17

+0

'print'在阵列上不起作用。 – mario 2012-08-08 20:48:34

+0

好的,所以var_dump还是? – 2012-08-08 20:49:35