2013-09-24 125 views
0

我有以下一段代碼正在生成JSON變量。我使用內置的json_decode函數來解碼json變量,但是在解碼JSOn變量後我得到了NULL。無法解碼json變量

$a=array("targetAction"=>"getHeadFields","targetHead"=>$table_name); 
$obj1 = Post_Uamsdata($a); 
echo $obj1; 

$file = json_decode($obj1,true); 
var_dump($file); 

$ obj1是我的json變量。每當我回聲它,我得到的結果如下:

{"success":"yes","error":"","message":"","arguments":"[{\"fieldNo\":\"1\",\"fieldName\":\"ItemType\",\"fieldType\":\"character(16)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"2\",\"fieldName\":\"Long\",\"fieldType\":\"character(20)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"3\",\"fieldName\":\"Lat\",\"fieldType\":\"character(20)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"4\",\"fieldName\":\"MapDate\",\"fieldType\":\"character(16)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"5\",\"fieldName\":\"FieldNote\",\"fieldType\":\"character(64)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]}]"} 

我檢查了它在網上的json驗證,它是說這個JSOn是有效的。但每當我解碼這$ obj1到$文件,然後我總是得到NULL。

+0

無法重現 - 假設你函數'Post_Uamsdata'生成你聲明的JSON字符串,它成功解碼:[gist](https://gist.github.com/customanything/6680625) – traq

+0

請分享Post_Uamsdat的代碼a() – anupam

+0

僅當整個JSON字符串附加了分號(;)時纔可能。所以,我想你應該這樣做:$ file = json_decode(rtrim($ obj1,';'),true);讓我知道。 – anupam

回答

0

json_decode將接受json格式的字符串並返回混合類型。請通過此鏈接json_decode我們得到以下後,它可以是有用的

http://php.net/manual/en/function.json-decode.php

-Vamsi

+0

我已經通過這個鏈接,我現在完全啞巴爲什麼我在JSON解碼NULL NULL –

0

,但我想這是不是你想要的。你想要fieldNo,fieldName等也被解析。

$json = '{"success":"yes","error":"","message":"","arguments":"[{\"fieldNo\":\"1\",\"fieldName\":\"ItemType\",\"fieldType\":\"character(16)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"2\",\"fieldName\":\"Long\",\"fieldType\":\"character(20)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"3\",\"fieldName\":\"Lat\",\"fieldType\":\"character(20)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"4\",\"fieldName\":\"MapDate\",\"fieldType\":\"character(16)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]},{\"fieldNo\":\"5\",\"fieldName\":\"FieldNote\",\"fieldType\":\"character(64)\",\"notnull\":\"f\",\"fieldLabel\":null,\"primary_key\":\"f\",\"default\":null,\"fieldOption\":[]}]"}'; 

$arr = json_decode($json, true); 
echo "<pre>"; 
print_r($arr); 

輸出如下

Array 
(
    [success] => yes 
    [error] => 
    [message] => 
    [arguments] => [{"fieldNo":"1","fieldName":"ItemType","fieldType":"character(16)","notnull":"f","fieldLabel":null,"primary_key":"f","default":null,"fieldOption":[]},{"fieldNo":"2","fieldName":"Long","fieldType":"character(20)","notnull":"f","fieldLabel":null,"primary_key":"f","default":null,"fieldOption":[]},{"fieldNo":"3","fieldName":"Lat","fieldType":"character(20)","notnull":"f","fieldLabel":null,"primary_key":"f","default":null,"fieldOption":[]},{"fieldNo":"4","fieldName":"MapDate","fieldType":"character(16)","notnull":"f","fieldLabel":null,"primary_key":"f","default":null,"fieldOption":[]},{"fieldNo":"5","fieldName":"FieldNote","fieldType":"character(64)","notnull":"f","fieldLabel":null,"primary_key":"f","default":null,"fieldOption":[]}] 
) 
+0

是的它正確的我會做到這一點,但我被卡在NULL thjing –

+0

但它的工作權在我的末端.. –

+0

我有也通過硬編碼值檢查它工作正常,但它給了我NULL當我解碼JSON對象 –

0

由於http://php.net/manual/en/function.json-decode.php表示該功能只支持UTF-8編碼字符串的工作,請嘗試以下操作:

$file = json_decode(mb_convert_encoding($obj1, 'UTF-8'),true); 
+0

仍然沒有得到任何東西 –

+0

請發佈Post_Uamsdata()函數的代碼。 – anupam