亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

php json轉換相關知識(小結)

2024-05-05 00:05:57
字體:
來源:轉載
供稿:網友

最近在查找一個bug的時候,發現前端傳過來的json空對象 {} ,被php轉換成了空數組 [] 存到了數據庫里面, 讀取并返回給前端的時候,沒有做特殊處理,返回了 [] 給前端,導致一些問題。

所以決定梳理一下php的json轉換相關的內容。

索引數組轉json

看如下示例代碼:

$a = ['aa', 'bb', 'cc'];$ret = json_encode($a);var_dump($ret);

打印結果是:

string(16) "["aa","bb","cc"]"

可以看到,索引數組被轉換成了json數組

關聯數組轉json

看如下示例代碼:

$a = [ 'a' => 'aa', 'b' => 'bb', 'c' => 'cc'];$ret = json_encode($a);var_dump($ret);

打印結果是:

string(28) "{"a":"aa","b":"bb","c":"cc"}"

可以看到,關聯數組被轉換成了json對象

其實索引數組也可以寫成關聯數組,看如下代碼:

$a = [ 0 => 'aa', 1 => 'bb', 2 => 'cc'];$ret = json_encode($a);var_dump($ret);$a = [ 2 => 'aa', 3 => 'bb', 4 => 'cc'];$ret = json_encode($a);var_dump($ret);

打印結果是:

string(16) "["aa","bb","cc"]"
string(28) "{"2":"aa","3":"bb","4":"cc"}"

看第一個,索引數組變成關聯數組,使用json_encode的時候,還是轉換成了json數組;第二個關聯數組,被轉化成了json對象

強制把php索引數組轉成json對象

上面看到json_encode把 索引數組 轉成了 json數組 ,如果要強制轉成 json對象 怎么辦?

可以用下面這兩種方法。第一種方法,是在json_encode的時候設置第二個參數為JSON_FORCE_OBJECT。第二種方法是先強制將php數組變成了php對象,再將php對象轉換成json對象

$a = ['aa', 'bb', 'cc'];$ret = json_encode($a, JSON_FORCE_OBJECT);var_dump($ret); $ret = (object)$a; // 強制將php數組變成了php對象var_dump($ret); $ret = json_encode($ret); // 將php對象轉換成json對象var_dump($ret);

打印結果是:

string(28) "{"0":"aa","1":"bb","2":"cc"}"
object(stdClass)#1 (3) {
  [0]=>
  string(2) "aa"
  [1]=>
  string(2) "bb"
  [2]=>
  string(2) "cc"
}
string(28) "{"0":"aa","1":"bb","2":"cc"}"

json轉成數組

$str = '{"name":"zhangsan", "age": 18}';$ret2 = json_decode($str, true);var_dump($ret2);$str = '["q", "w", "e"]';$ret = json_decode($str, true);var_dump($ret);
array(2) { ["name"]=> string(8) "zhangsan" ["age"]=> int(18)}array(3) { [0]=> string(1) "q" [1]=> string(1) "w" [2]=> string(1) "e"}

可以看到,json_decode方法如果第二個參數是true的話,會把json對象/json數組轉成php數組

json轉成對象

$str = '{"name":"zhangsan", "age": 18}';$ret = json_decode($str);var_dump($ret);var_dump($ret->name);
object(stdClass)#1 (2) { ["name"]=> string(8) "zhangsan" ["age"]=> int(18)}string(8) "zhangsan"

如果json_decode方法不加第二個參數的話,默認就是false,會把json對象/json數組轉成php里面的對象。php里面的對象,可以使用 -> 訪問其變量

對象轉成json

看如下示例代碼:

class TestJson {    const CONST_VALUE_A = 'aaa';    public $b = 'bbb';    protected $c = 'ccc';    private $d = 'ddd';    public function hello() {        print_r("hello/n");    }    public static $stValue = 'st';}$test = new TestJson();var_dump($ret);$ret = json_encode($test);var_dump($ret);

打印結果是:

string(11) "{"b":"bbb"}"

可與看到,只有public變量,其他在轉換成json的時候都被丟掉了

下面說一下我在本文開頭提到的,“發現前端傳過來的json空對象 {} ,被php轉換成了空數組 [] 存到了數據庫里面”

原來我的代碼是這樣實現的:

存數據相關示例代碼:

// 存數據$raw = file_get_contents('php://input');$param = json_decode($raw, true);var_dump($param);$s = json_encode($param);var_dump($s); ……// 將$s存到了數據庫表對應字段里面…………

打印結果是:

array(0) {
}
string(2) "[]"

取數據相關示例代碼:

// 取數據$column = json_deocde($c, true);$resp = [ 'status' => 0, 'column' => $column,];echo json_encode($resp);

打印結果是:

{"status": 0, "column": []}

現在要避免上面這個問題,取出的代碼應該這樣寫,才能實現前端傳過來json空對象 {} ,保存在數據庫里也是 {} 。從數據庫里取出,返回給前端的時候也是一個json空對象 {}

存數據相關代碼保持不變,取數據相關示例代碼:

// 取數據$column = json_deocde($c, true);if (empty($column)) { $column = (object)$column; // 強制將php空數組變成了php對象}$resp = [ 'status' => 0, 'column' => $column,];echo json_encode($resp);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人四级hd版| 美女精品视频一区| 日韩av影视在线| 成人网中文字幕| 色777狠狠综合秋免鲁丝| 亚洲精品suv精品一区二区| 性欧美xxxx| 久久精品电影一区二区| 亚洲999一在线观看www| 国产成人免费91av在线| 精品视频在线观看日韩| 69**夜色精品国产69乱| 国产成人一区二区| 不卡中文字幕av| 91精品成人久久| 亚洲人永久免费| 久久综合国产精品台湾中文娱乐网| 中文字幕国产亚洲| 91高清视频在线免费观看| 亚洲伊人第一页| 国产欧美日韩专区发布| 亚洲国产天堂久久综合网| 亚洲91精品在线观看| 亚洲免费电影在线观看| 国产精品视频导航| 国产欧美一区二区| 久久久久久伊人| 亚洲人成网站999久久久综合| 久久99久国产精品黄毛片入口| 欧美激情2020午夜免费观看| 亚洲精品成人网| 亚洲精品国产品国语在线| 久久久久久久久网站| 亚洲乱码国产乱码精品精天堂| 国产精品久久久久秋霞鲁丝| 亚洲激情在线观看视频免费| 亚洲成色999久久网站| 中文字幕av一区| 91精品久久久久久| 欧美精品在线免费观看| 欧美性videos高清精品| 欧美激情精品久久久久久免费印度| 国产精品国产三级国产aⅴ9色| 亚洲高清久久网| 欧美激情二区三区| 国产精品伦子伦免费视频| 国模视频一区二区| 日av在线播放中文不卡| 欧美制服第一页| 亚洲精品99久久久久中文字幕| 亚洲第一天堂av| 国产精品久久久久久久久久ktv| 精品久久香蕉国产线看观看亚洲| 亚洲在线免费视频| 久久综合亚洲社区| 国产精品99久久久久久www| 亚洲精品www久久久久久广东| 亚洲最大福利视频网| 日本19禁啪啪免费观看www| 亚洲成人网久久久| 久久久久成人精品| 中文字幕国产亚洲2019| 久久久精品美女| 亚洲精品国产品国语在线| 亚洲欧洲一区二区三区久久| 欧美成人一二三| 激情成人在线视频| 欧美性猛交xxxx乱大交3| 91色琪琪电影亚洲精品久久| 亚洲欧洲日韩国产| 国产91露脸中文字幕在线| 日韩美女av在线免费观看| 中文字幕精品国产| 日韩av在线网| 国产成人精品av| 成人av.网址在线网站| 亚洲综合精品伊人久久| 精品国产视频在线| 日韩中文字幕在线精品| 欧美网站在线观看| 欧美视频专区一二在线观看| 亚洲成avwww人| 国产精品一二三在线| 国产精品久久久久久久久久久久久| 国产精品久久色| 亚洲天堂色网站| 亚洲国产精品va在线看黑人动漫| 91在线视频导航| 欧美日本精品在线| 久久久国产精品x99av| 91中文精品字幕在线视频| 亚洲**2019国产| 精品香蕉一区二区三区| 久久中文字幕视频| 国产激情久久久久| 亚洲综合在线做性| 久久久亚洲精品视频| 国产成人精品最新| 亚洲国产欧美一区二区三区久久| 午夜免费久久久久| 伊人一区二区三区久久精品| 欧洲成人在线观看| 亚洲欧美在线一区二区| 亚洲午夜精品久久久久久久久久久久| 成人网页在线免费观看| 亚洲美女视频网站| 欧美黄色片免费观看| 97超级碰碰碰| 久久亚洲国产成人| 中文综合在线观看| 亚洲缚视频在线观看| 国产性色av一区二区| 在线观看日韩www视频免费| 揄拍成人国产精品视频| 久久久精品国产网站| 亚洲国产精品成人一区二区| 草民午夜欧美限制a级福利片| 国产精品美腿一区在线看| 久久激情五月丁香伊人| 欧美精品18videos性欧| 91亚洲午夜在线| 亚洲第一页自拍| 国产精品爽爽ⅴa在线观看| 日韩最新av在线| 欧美高跟鞋交xxxxhd| 久久久久久久久久国产精品| 91极品视频在线| 亚洲欧美视频在线| 久热在线中文字幕色999舞| 91人成网站www| 国产成人中文字幕| 国产欧美日韩丝袜精品一区| 日韩女优在线播放| 不卡av电影在线观看| 欧美老女人www| 国产伦精品一区二区三区精品视频| 国产97色在线| 国产在线一区二区三区| 亚洲图片欧洲图片av| 在线精品高清中文字幕| 亚洲经典中文字幕| 久久精品国产成人精品| 51色欧美片视频在线观看| 日韩精品中文字幕视频在线| 91国产精品视频在线| 色婷婷久久av| 欧美电影免费观看网站| 8x拔播拔播x8国产精品| 自拍偷拍亚洲一区| 久久亚洲精品网站| 国产精品综合久久久| 中文字幕综合一区| 日韩欧美在线观看视频| 中文字幕亚洲欧美日韩高清| 亚洲人成在线观看| 夜夜嗨av色一区二区不卡| 97香蕉超级碰碰久久免费软件| 亚洲精品免费一区二区三区| 欧美成人自拍视频| 亚洲精品久久久久久下一站| 9.1国产丝袜在线观看| 色七七影院综合| 中文字幕久热精品在线视频| 国产视频久久久|