導航:首頁 > 編程語言 > php解析jsonnull

php解析jsonnull

發布時間:2022-08-29 07:37:21

php獲取伺服器端數據得到json後轉換數組始終為null是怎麼回事

你可以將你獲取到的json數據貼上來看看.出現null絕大多數是因為格式有誤引起的。
但是有時候也會由於編碼原因(比如,遠程獲取其它鏈接地址的json數據)

② php 解析json 字元串,真的沒人會嗎求大神解答


$a=['2'=>2,'3'=>3,'4'=>json_encode(['5'=>'5','6'=>'6'])];
$b=['a'=>json_encode($a),'b'=>['a'=>'b']];
$json_code=json_encode($b);

echo$json_code;
echo" ";
$json_str='{"a":"{"2":2,"3":3,"4":"{\"5\":\"5\",\"6\":\"6\"}"}","b":{"a":"b"}}';

//這兩個並不相等
var_mp($json_code);
var_mp($json_str);

echo" ";
//這樣才相等
$json_str='{"a":"{"2":2,"3":3,"4":"{\"5\":\"5\",\"6\":\"6\"}"}","b":{"a":"b"}}';
$json_str=str_replace("\\","\\\",$json_str);


echo" ";
echo$json_str;
echo" ";

$arr=json_decode($json_str,true);
print_r($arr);

③ php怎麼解析utf-8帶BOM編碼的json數據,php解析json數據返回NULL

方法一:在你輸出的時候就進行處理,在轉為json之前對中文進行轉碼;

方法二:

$json=json_decode(trim($json,chr(239).chr(187).chr(191)),true);


方法三:

functionprepareJSON($input){
if(substr($input,0,3)==pack("CCC",0xEF,0xBB,0xBF))$input=substr($input,3);
return$input;
}

④ 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

目前,JSON已經成為最流行的數據交換格式之一,各大網站的API幾乎都支持它。
從5.2版本開始,PHP原生提供json_encode()和json_decode()函數,前者用於編碼,後者用於解碼。
一、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}

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

二、索引數組和關聯數組
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"]

三、類(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),其他東西(常量、私有變數、方法等等)都遺失了。

⑥ php json 中文null怎麼處理啊

Json 只支持 utf-8 編碼

<?php
/**************************************************************
*
* 使用特定function對數組中所有元素做處理
* @param string &$array 要處理的字元串
* @param string $function 要執行的函數
* @return boolean $apply_to_keys_also 是否也應用到key上
* @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}

if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}

/**************************************************************
*
* 將數組轉換為JSON字元串(兼容中文)
* @param array $array 要轉換的數組
* @return string 轉換得到的json字元串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}

$array = array
(
'Name'=>'希亞',
'Age'=>20
);

echo JSON($array);
?>

⑦ PHP怎麼解析這段json代碼,並且要循環輸出來

$str=json_decode('你的json');
var_mp($str->info->item[0]);//取出第一個item

⑧ php解析不了JSON

⑨ php json_decode 為什麼我遠程獲取的json數據用json_decode無法解析返回null同樣的字元串如果我固定在

首先要確認的是「遠程獲取的json數據」是不是真的獲取到了?
如果獲取到了,不能decode那就比較奇怪了。把錯誤信息貼出來。

⑩ 問大佬php中如何用 foreach解析json

首先,不推薦使用foreach進行自己去解析json字元串,因為php已經封裝了非常好用,且效率不低的內置方法,這個方法就是json_decode。
使用這個函數,可以直接把json數據轉換成數據或者對象,這個是可以控制的。轉換成對象或者數組之後,再使用foreach就可以方便遍歷得到想要的數據。

閱讀全文

與php解析jsonnull相關的資料

熱點內容
卸載聯想app哪個好 瀏覽:719
php文字轉圖片 瀏覽:328
豆客後台怎麼加密碼 瀏覽:574
jpg轉換pdf破解版 瀏覽:978
php基礎書籍推薦 瀏覽:775
伺服器與外網不通如何驗證 瀏覽:351
電子版是不是就是文件夾 瀏覽:50
游戲屬性文件加密 瀏覽:462
如何讓安卓手機桌面圖標下移 瀏覽:528
ubuntuphp5環境搭建 瀏覽:99
賭癮解壓視頻 瀏覽:917
晉城移動dns伺服器地址 瀏覽:294
php開源文庫系統 瀏覽:134
android記事本源碼 瀏覽:406
安卓11小游戲怎麼玩法 瀏覽:188
gif有損壓縮 瀏覽:936
windows下安裝linux命令操作 瀏覽:842
米家app怎麼設置進門亮燈 瀏覽:652
任我行伺服器為什麼會影響截圖 瀏覽:296
安卓留言板怎麼刪除 瀏覽:18