首頁 web前端 js教程 json在php有何應用? (程式碼範例)

json在php有何應用? (程式碼範例)

Sep 28, 2018 pm 04:01 PM
json

這篇文章帶給大家的內容是關於json在php中有何應用? (程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

從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}<span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"> <span class="token string"><span class="token punctuation"><span class="token number"><span class="token punctuation"></span></span></span> </span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>

##再看一個物件轉換的例子:

$obj->body = &#39;another post&#39;;
$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編碼的時候,這一點要特別注意。

二、索引數組和關聯數組<span class="token punctuation"><span class="token string"><span class="token punctuation">PHP支援兩個數組,一個是只保存"值"(value)的索引數組(indexed array),另一種是保存"名值對"(name/value)的關聯數組(associative array)。 <span class="token string"><span class="token punctuation">由於javascript不支援關聯數組,所以<span class="token string">json_encode()只將索引數組(indexed array)轉換成數組格式,而將關聯數組(associative array)轉為物件格式。 <span class="token punctuation"><span class="token string"><span class="token punctuation">例如,現在有一個索引數組<span class="token string"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> $arr = array(&amp;#39;one&amp;#39;,&amp;#39;two&amp;#39;,&amp;#39;three&amp;#39;); echo json_encode($arr);</pre><div class="contentsignin">登入後複製</div></div><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>结果为:[&quot;one&quot;,&quot;two&quot;,&quot;three&quot;]  </pre><div class="contentsignin">登入後複製</div></div><span class="token punctuation">如果將它改為關聯數組:<span class="token string"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> $arr = Array(&amp;#39;1&amp;#39;=&gt;&amp;#39;one&amp;#39;, &amp;#39;2&amp;#39;=&gt;&amp;#39;two&amp;#39;, &amp;#39;3&amp;#39;=&gt;&amp;#39;three&amp;#39;);    echo json_encode($arr);</pre><div class="contentsignin">登入後複製</div></div><span class="token punctuation">結果就變了:{"1":"one ","2":"two","3":"three"}</span></span></span></span></span></span></span></span></span></span></span> </span></span>#  

#注意,資料格式從"[]"(陣列)變成了"{}"(物件)。

如果你需要將"索引數組"強制轉換成"物件"<span class="token punctuation">,可以這樣寫:<span class="token string"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> json_encode( (object)$arr );</pre><div class="contentsignin">登入後複製</div></div><span class="token punctuation">或:<span class="token string"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> json_encode ( $arr, JSON_FORCE_OBJECT );</pre><div class="contentsignin">登入後複製</div></div><span class="token punctuation"> </span>三、類別(class)的轉換</span></span></span>下面是一個PHP的類別:</span><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>class Foo { const ERROR_CODE = &amp;#39;404&amp;#39;; public $public_ex = &amp;#39;this is public&amp;#39;; private $private_ex = &amp;#39;this is private!&amp;#39;; protected $protected_ex = &amp;#39;this should be protected&amp;#39;; public function getErrorCode() { return self::ERROR_CODE; } }</pre><div class="contentsignin">登入後複製</div></div>現在,對這個類別的實例進行json轉換:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> $foo = new Foo; $foo_json = json_encode($foo); echo $foo_json;</pre><div class="contentsignin">登入後複製</div></div><span class="token punctuation">輸出結果是:{"public_ex":"this is public"}<span class="token string"><span class="token punctuation"><span class="token string"><span class="token punctuation"></span></span># </span></span></span>

  

可以看到,

除了公開變數(public),其他東西(常數、私有變數、方法等等)都遺失了。

四、json_decode()

此函數用於將json文字轉換為對應的PHP資料結構。下面是一個例子:

$json = &#39;{"foo": 12345}&#39;;
$obj = json_decode($json);
print $obj->{&#39;foo&#39;}; // 12345  
登入後複製

通常情況下,json_decode()總是傳回一個PHP對象,而不是陣列。

例如:

$json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
var_dump(json_decode($json)); 
登入後複製

結果就是產生一個PHP物件:

object(stdClass)[2]
  public &#39;a&#39; => int 1
  public &#39;b&#39; => int 2
  public &#39;c&#39; => int 3
  public &#39;d&#39; => int 4
  public &#39;e&#39; => int 5
登入後複製

如果想要強制產生PHP關聯數組,json_decode()需要加一個參數true:### ###
$json = &#39;{"a":1,"b":2,"c":3,"d":4,"e":5}&#39;;
var_dump(json_decode($json,true));   
登入後複製
###結果就產生了一個關聯數組:###
array (size=5)
  &#39;a&#39; => int 1
  &#39;b&#39; => int 2
  &#39;c&#39; => int 3
  &#39;d&#39; => int 4
  &#39;e&#39; => int 5
登入後複製
######五、json_decode()的常見錯誤#########下面三種json寫法都是錯的,你看得出錯在哪裡嗎? ###
$bad_json = "{ &#39;bar&#39;: &#39;baz&#39; }";
$bad_json = &#39;{ bar: "baz" }&#39;;
$bad_json = &#39;{ "bar": "baz", }&#39;;
登入後複製
###對這三個字串執行json_decode()都###將傳回null###,並且報錯。 ###

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。

第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号

第三个的错误是,最后一个值之后不能添加逗号(trailing comma)
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

var_dump(json_decode("Hello World")); //null
登入後複製

以上是json在php有何應用? (程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
如何在Java中使用@Expose註解從JSON中排除一個欄位? 如何在Java中使用@Expose註解從JSON中排除一個欄位? Sep 16, 2023 pm 09:49 PM

Gson@Expose註解可用於標記欄位是否公開(包含或不包含)以進行序列化或反序列化。 @Expose註解可以採用兩個參數,每個參數都是一個布林值,可以採用值true或false。為了讓GSON對@Expose註解做出反應,我們必須使用GsonBuilder類別建立一個Gson實例,並且需要呼叫excludeFieldsWithoutExposeAnnotation()方法,它將Gson配置為排除所有沒有Expose註解的欄位進行序列化或反序列化。語法publicGsonBuilderexclud

golang WebSocket與JSON的結合:實現資料傳輸與解析 golang WebSocket與JSON的結合:實現資料傳輸與解析 Dec 17, 2023 pm 03:06 PM

golangWebSocket與JSON的結合:實現資料傳輸和解析在現代的Web開發中,即時資料傳輸變得越來越重要。 WebSocket是一種用於實現雙向通訊的協議,與傳統的HTTP請求-回應模型不同,WebSocket允許伺服器向客戶端主動推送資料。而JSON(JavaScriptObjectNotation)是一種用於資料交換的輕量級格式,它簡潔易讀

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

MySQL5.7和MySQL8.0的差別是什麼? MySQL5.7和MySQL8.0的差別是什麼? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0是兩個不同的MySQL資料庫版本,它們之間有以下一些主要差異:效能改進:MySQL8.0相對於MySQL5.7有一些效能改進。其中包括更好的查詢優化器、更有效率的查詢執行計劃產生、更好的索引演算法和平行查詢等。這些改進可以提高查詢效能和整體系統效能。 JSON支援:MySQL8.0引入了對JSON資料類型的原生支持,包括JSON資料的儲存、查詢和索引。這使得在MySQL中處理和操作JSON資料變得更加方便和有效率。事務特性:MySQL8.0引進了一些新的事務特性,如原子

使用golang中的json.MarshalIndent函數將結構體轉換為格式化的JSON字串 使用golang中的json.MarshalIndent函數將結構體轉換為格式化的JSON字串 Nov 18, 2023 pm 01:59 PM

使用golang中的json.MarshalIndent函數將結構體轉換為格式化的JSON字串在使用Golang編寫程式時,我們經常需要將結構體轉換為JSON字串,在這個過程中,json.MarshalIndent函數可以幫助我們實現格式化的輸出。下面我們將詳細介紹如何使用這個函數,並提供具體的程式碼範例。首先,讓我們建立一個包含一些資料的結構體。以下是示

C#開發中如何處理XML和JSON資料格式 C#開發中如何處理XML和JSON資料格式 Oct 09, 2023 pm 06:15 PM

C#開發中如何處理XML和JSON資料格式,需要具體程式碼範例在現代軟體開發中,XML和JSON是廣泛應用的兩種資料格式。 XML(可擴展標記語言)是一種用於儲存和傳輸資料的標記語言,而JSON(JavaScript物件表示)是一種輕量級的資料交換格式。在C#開發中,我們經常需要處理和操作XML和JSON數據,本文將重點放在如何使用C#處理這兩種數據格式,並附上

使用PHP的json_encode()函數將陣列或物件轉換為JSON字串並格式化輸出 使用PHP的json_encode()函數將陣列或物件轉換為JSON字串並格式化輸出 Nov 03, 2023 pm 03:44 PM

使用PHP的json_encode()函數將陣列或物件轉換為JSON字串並格式化輸出,可以讓資料在不同的平台和語言之間進行傳遞和交換變得更加容易。本文將介紹json_encode()函數的基本用法,以及如何將JSON字串格式化輸出。一、json_encode()函數的基本用法json_encode()函數的基本語法如下:stringjson_encod

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

See all articles