php 生成json 格式主要使用json_encode()函式。這個函式的輸入引數支援php陣列和物件型別。
查閱網上的例子通常都是使用陣列的,也有個別使用物件生成。但實際專案中,我們要生成的json格式往往比較複雜,有多層的巢狀,而且通常需要包含乙個json根節點。在這種情況下如果使用陣列其實是非常困難的,因為把資料報裝成適合的陣列格式本就非常困難。
怎麼辦呢?答案是使用物件進行封裝,利用php非常鬆散的弱型別特點,將可以非常輕鬆並且清晰的實現json進行生成。
1.首先定義乙個類,名稱隨便,只要乙個空的類定義即可,我習慣命名為jsonobject。
class jsonobject
2.然後就可以使用這個類啦。
舉個簡單的例子,比如我們要生成這樣乙個json字串:}
**如下:
$jsonstring=new jsonobject();
$jsonstring->person=new jsonobject();
$jsonstring->person->name="zangkaifeng";
$jsonstring->person->***=urlencode("男");
echo urldecode( json_encode($jsonstring));
大功告成了。是不是非常的簡單和結構清晰呢?如果裡面遇到json陣列型別的也是一樣的處理方式。以後遇到再複雜的json格式也不怕了。
執行以後問題又來了,輸出的json字串中文是類似這種
:\u8fd9,不是我們想要的中文。怎麼辦呢?需要先對非英文本元進行編碼,使用urlencode函式。然後在對生成的json進行解碼就可以了,具體修改**如下:
$jsonstring=new jsonobject();
$jsonstring->person=new jsonobject();
$jsonstring->person->name="zangkaifeng";
$jsonstring->person->***="男";
echo json_encode($jsonstring);
本以為沒問題了,再輸出**的時候又遇到到了問題,例如要在json中包含乙個**:出問題了。經過json_encode函式後,/ 都被加了轉移字元,變成這個樣子:http:\/\/www.abc.com\/a.jpg。如何解決呢?辦法如下:
json_encode函式有兩個引數,我們新增第二個引數就可以了。不過這個只能應用在php 5.4.0以上。引數由以下常量定義:json_hex_quot
,
json_hex_tag
,
json_hex_amp
,
json_hex_apos
,
json_numeric_check
,
json_pretty_print
,
json_unescaped_slashes
,
json_force_object
,
json_unescaped_unicode
為了解決我們的問題,只需要使用json_unescaped_slashes常量即可,**如下:
json_encode($jsonstring,json_unescaped_slashes);
我們發現這些常量裡有乙個json_unescaped_unicode,這個名字看起來跟編碼有關係,沒錯,使用這個常量就可以解決我們之前說的中文編碼的問題了,可以拋棄urlencode和urldecode了,真是太棒了。
再補充一句:json_encode只支援兩個引數,所以要使用多個常量怎麼辦呢?辦法就是多個常量直接用|分隔。如下**就可以同時解決斜線和中文的問題啦:
json_encode($jsonstring,
json_unescaped_slashes | json_unescaped_unicode);
至於其他常量都是做什麼用的,大家自己慢慢研究吧。
本人初學php才幾天,發表內容非常淺顯,希望能給大家提供到幫助 o(∩_∩)o哈哈~
hive儲存複雜的json格式
1.hive復合資料型別 array data type map primitive type,data type struct col name data type comment col comment 2.json建構於兩種結構 名稱 值 對的集合 a collection of name v...
Hive 解析複雜json格式字段
本篇文章中所使用的方法來自部落格hive中的lateral view 與 explode函式的使用,感謝大佬的分享。一.問題背景 資料來源hive資料表結構如下 其中info欄位的資料型別為string格式的複雜json結構,例如 需求現在需要統計每個id 中info欄位所對應的使用者數量,而最關鍵...
PHP檢測json格式資料
首先要記住json encode返回的是字串,而json decode返回的是物件 判斷資料不是json格式 複製 如下 function is not json str 判斷資料是合法的json資料 php版本大於5.3 複製 如下 function is json string json las...