導航:首頁 > 編程語言 > phpjsondecode失敗

phpjsondecode失敗

發布時間:2024-06-16 14:35:16

php的json解析

注意json數據的格式。variety是嵌套在內部對象里的,直接訪問當然獲取不到。這里我建議你這樣使用json_decode():

<?php
json_deocde($content,true);//第二個參數設為true時返回一個數組,而不是對象

解析的結果是:

$r=array(
'resultcode'=>'200',
'reason'=>'SUCCESSED!',
'result'=>
array(
0=>
array(
1=>
array(
'variety'=>'Ag(T+D)',
'latestpri'=>'4025.00',
'openpri'=>'3982.00',
'maxpri'=>'4048.00',
'minpri'=>'3961.00',
'limit'=>'1.95%',
'yespri'=>'3948.00',
'totalvol'=>'2703962.0000',
'time'=>'2013-08-0915:45:01',
),
//這里還有很多類似的結構,省略
),
),
)

獲得第一個variety的方法是:

<?php
echo$r['result'][0][1]['variety'];

望採納!

⑵ PHP取得JSON中的值

<?php
$a='{"from":"kor","to":"zh","trans_result":[{"src":".","dst":""}]}';

$tt=json_decode($a,true);
var_mp($tt);
echo"--------------- ";
echo$tt['trans_result'][0]['dst'];
?>

執行結果如下圖

⑶ PHP json_decode(); 為什麼沒輸出

我們知道網路api並不是百分百可靠,當遇到網路不穩定,介面出錯等各種因素,並不一定返回標準的json數據,例如:

//如果從網路api抓取失敗,返回的response為錯誤信息
$response='requesttimeout';
//json_decode之後返回NULL,你列印之後仍然沒有輸出,所以你採納的那個答案仍然也幫不到你
print_r(json_decode($response,true));
//使用var_mp列印雖然可以看到NULL值,可是這並沒有任何用處
var_mp(json_decode($response,true));

系統函數json_decode()在解析非json字元串返回NULL,解析亂碼的json也返回NULL,你壓根都不知道到底是哪裡出了問題,因為NULL該返回值是不能通過print_r列印出來的,而官方php手冊給了一些捕獲異常信息的方法已經封裝在下面的函數中了:

<?php
/**
*json解析介面,優化json_decode對數組的解析
*@paramstring$json_codejson字元串
*@returnmix錯誤信息或者數組
*/
function_json_decode($json_code)
{
$json_arr=json_decode($json_code,true);
switch(json_last_error()){
caseJSON_ERROR_NONE:
$error='';
break;
caseJSON_ERROR_DEPTH:
$error='-Maximumstackdepthexceeded';
break;
caseJSON_ERROR_STATE_MISMATCH:
$error='-Underfloworthemodesmismatch';
break;
caseJSON_ERROR_CTRL_CHAR:
$error='-';
break;
caseJSON_ERROR_SYNTAX:
$error='-Syntaxerror,malformedJSON';
break;
caseJSON_ERROR_UTF8:
$error='-MalformedUTF-8characters,possiblyincorrectlyencoded';
break;
default:
$error='-Unknownerror';
break;
}
if($error)
{
return$error.':'.$json_code;
}else{
return$json_arr;
}
}
header('Content-type:text/html;charset=utf-8');
$json='thisisnotajsoncode';
$arr=_json_decode($json);
if(is_array($arr))
{
//解析正確,邏輯代碼部分
print_r($arr);
}else{
//請求超時,一般都會有異常處理機制,例如重新發起請求
if($result=='requesttimeout'){
//發起請求
}else{
//如果沒有異常處理機制,拋出異常給上一層處理
thrownewException($result);
}
}

使用_json_decode的返回值如果是字元串,說明在解析json數據時遇到了錯誤,只要添加適當處理機制,可以大大提高代碼的穩固性。

如果返回值是數組,這時便可以使用print_r列印出來。

⑷ PHP 璇誨彇涓嶄簡Json

鐢變簬js鐨勬暟緇勬牸寮忓拰php鐨勬暟緇勬牸寮忎笉涓鏍峰緢闅鵑氳鎵浠ユ湁浜 json 榪欐牱鐨勭帺鎰忓皹鍧
鐢╦son_decode()鍑芥暟灝咼SON 鏍煎紡鐨勫瓧絎︿覆緙栫爜銆
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_mp(json_decode($json));
var_mp(json_decode($json, true));
?>
浠ヤ笂渚嬬▼浼氳緭鍑猴細
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}[1]
榪樻湁涓猨son_encode
鐢╦son_encode()鍑芥暟瀵規暟緇勮繘琛孞SON緙栫爜銆
<?php
$arr = array ('a'=>1,'b'=>2,'浜╂āc'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>
浠ヤ笂渚嬬▼浼氳緭鍑猴細
{"a":1,"b":2,"c":3,"d":4,"e":5}[1]甯屾湜鑳藉府鍒頒綘錛屾垜榪樺湪鍚庢淳鑰愭愮浘緗戜笂璇懼︿範鍛㈢幇鍦ㄦ病鏃墮棿錛屾湁涓嶄細鐨勫彲浠ラ棶鎴戱紝涓璧風爺絀剁爺絀跺惂(๑•॒̀ ູ॒•́๑)鍟﹀暒鍟

⑸ php json_decode();解析出布爾值true是1,false為空,怎麼解決

布爾值true和false的實際值就是1和空,true和false只不過是它們的名字(相當於常量)而已,不信你試試下面兩行代碼:
echo true; //顯示為1
echo false; //顯示為空
所以json中的true和false解析為1和空就是再正常不過的事,誰也沒有吃它,因為這才是它們的真面目。
你可以在實際應用中直接把它們當作true和false來使用:
if ($j["flag"]) echo "flag的值是true";
如果你一定要顯示為true和false才舒服,那可以在實際應用中轉換一下即可:
echo $j["flag"]?"true":"false"; //注意,引號是必須的,否則結果仍然是1和空
當然,用 var_mp 和 var_export 可以列印出true和false,但這沒法用於實際應用啊,只能用於程序調試。

⑹ 如何正確運用PHP json

從5.2版本開始,PHP原生提供json_encode()和json_decode()函數,前者用於編碼,後者用於解碼。
1、json_encode()
該函數主要用來將數組和對象,轉換為json格式。先看一個數組轉換的例子:
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
上面代碼的輸出結果為:
{"a":1,"b":2,"c":3,"d":4,"e":5}
再看一個對象轉換的例子:

復制代碼代碼如下:

$obj->body = 'another post';
$obj->id = 21;
$obj->approved = true;
$obj->favorite_count = 1;
$obj->status = NULL;
echo json_encode($obj);

以上代碼的輸出結果為:

復制代碼代碼如下:

{
"body":"another post",

"id":21,
"approved":true,
"favorite_count":1,
"status":null
}

由於json只接受utf-8編碼的字元,所以json_encode()的參數必須是utf-8編碼,否則會得到空字元或者null。當中文使用GB2312編碼,或者外文使用ISO-8859-1編碼的時候,這一點要特別注意。

2、索引數組和關聯數組
PHP支持兩種數組,一種是只保存"值"(value)的索引數組(indexed array),另一種是保存"名值對"(name/value)的關聯數組(associative array)。
由於javascript不支持關聯數組,所以json_encode()只將索引數組(indexed array)轉為數組格式,而將關聯數組(associative array)轉為對象格式。
比如,現在有一個索引數組:
$arr = Array('one', 'two', 'three');
echo json_encode($arr);
其輸出結果為:
["one","two","three"]
如果將它改為關聯數組:
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
echo json_encode($arr);
結果就變了:
{"1":"one","2":"two","3":"three"}
注意,數據格式從"[]"(數組)變成了"{}"(對象)。
如果你需要將"索引數組"強制轉化成"對象",可以這樣寫
json_encode( (object)$arr );
或者:
json_encode ( $arr, JSON_FORCE_OBJECT );
3、類(class)的轉換
下面是一個PHP的類:

復制代碼代碼如下:

class Foo {

const ERROR_CODE = '404';
public $public_ex = 'this is public';
private $private_ex = 'this is private!';
protected $protected_ex = 'this should be protected';
public function getErrorCode() {
return self::ERROR_CODE;
}
}

現在,對這個類的實例進行json轉換:

復制代碼代碼如下:

$foo = new Foo;
$foo_json = json_encode($foo);
echo $foo_json;

輸出結果是:
{"public_ex":"this is public"}

可以看到,除了公開變數(public),其他東西(常量、私有變數、方法等等)都遺失了。
4、json_decode()
該函數用於將json文本轉換為相應的PHP數據結構。下面是一個例子:

復制代碼代碼如下:

$json = '{"foo": 12345}';
$obj = json_decode($json);
print $obj->{'foo'}; // 12345

通常情況下,json_decode()總是返回一個PHP對象,而不是數組。比如:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_mp(json_decode($json));

結果就是生成一個PHP對象:

復制代碼代碼如下:

object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)

}

如果想要強制生成PHP關聯數組,json_decode()需要加一個參數true:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_mp(json_decode($json),true);

結果就生成了一個關聯數組:

復制代碼代碼如下:

array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

5、json_decode()的常見錯誤
下面三種json寫法都是錯的,你能看出錯在哪裡嗎?

復制代碼代碼如下:

$bad_json = "{ 'bar': 'baz' }";
$bad_json = '{ bar: "baz" }';
$bad_json = '{ "bar": "baz", }';

對這三個字元串執行json_decode()都將返回null,並且報錯。

第一個的錯誤是,json的分隔符(delimiter)只允許使用雙引號,不能使用單引號。第二個的錯誤是,json名值對的"名"(冒號左邊的部分),任何情況下都必須使用雙引號。第三個的錯誤是,最後一個值之後不能添加逗號(trailing comma)。
另外,json只能用來表示對象(object)和數組(array),如果對一個字元串或數值使用json_decode(),將會返回null。
var_mp(json_decode("Hello World")); //null

⑺ php提取json數組裡面的值怎麼提

先把獲取的內容列印出來 ,看看是不是正常返回的數據

$filename="http://whois.pconline.com.cn/ipJson.jsp?json=true";
$content=file_get_contents($filename);

$json=@json_decode($content);
if($json){
$city=$json->city;
}else{
echo"json解析失敗:".$content;
}

也可以根據你的框架功能,寫成日誌,方便出錯時隨時檢查

另外 ,json_decode 可以接收一個參數來確定解析成對象還是數組

$content='{"ip":"120.239.177.231","pro":"廣東省","proCode":"440000","city":"中山市","cityCode":"442000","region":"","regionCode":"0","addr":"廣東省中山市移通","regionNames":"","err":""}';
$json=json_decode($content,true);
echo$json['city'];

參考文檔:PHP json_decode

閱讀全文

與phpjsondecode失敗相關的資料

熱點內容
越南電影在線觀看 瀏覽:285
kindeditorjava上傳 瀏覽:887
數據結構和演算法學習 瀏覽:733
印度電影《邊境戰爭》 瀏覽:296
免費看的網站 瀏覽:610
介面上應用的命令 瀏覽:380
工藤瞳主要作品 瀏覽:606
51單片機安裝 瀏覽:253
有發展前景編程語言 瀏覽:154
簡約影視vip解析源碼 瀏覽:217
上海app報價怎麼投 瀏覽:612
封裝最小的stc單片機 瀏覽:656
dos打開文件夾命令 瀏覽:599
唐水生伺候太太是什麼電影 瀏覽:558
linuxshellcode 瀏覽:323
美國床戲電影 瀏覽:975
氣體動力學pdf 瀏覽:984
午馬免費電影全集國語版 瀏覽:663
linux最大許可權 瀏覽:861
瞎子傳奇在線看免費完整版電影 瀏覽:273