首頁  >  文章  >  後端開發  >  php怎麼將物件數組轉為json格式

php怎麼將物件數組轉為json格式

PHPz
PHPz原創
2023-04-20 13:55:481481瀏覽

在web開發中,經常需要將一個物件陣列傳送給前端處理,而這個資料通常需要以json格式傳輸。 util中許多語言都提供了將物件轉換為json格式的工具,php也不例外。本文將詳細介紹php中將物件陣列轉換為json格式的方法。

一. json_encode()函數的使用

PHP中提供了json_encode()函數將物件陣列轉換為json格式。使用函數的方法如下:

範例程式碼:

<?php
$person = array(
   &#39;name&#39; => 'jack',
   'age' => 18,
   'city' => 'beijing'
);

echo json_encode($person);
?>

輸出結果:

{"name":"jack","age":18,"city":"beijing"}

可以看到,json_encode()函數的作用是將陣列或物件轉換為json格式的字串。在範例中,我們定義了一個物件$person,然後透過json_encode()函數將$person物件轉換為json格式的字串並輸出。

二. 帶參數使用json_encode()函數

json_encode()函數除了可以將物件陣列轉換為json格式的字串之外,還可以接受4個參數。

$a. $value參數

$value參數用來傳遞需要轉換的物件(或陣列)。 $value參數可以是任何PHP類型,除了一個resource類型。在具體使用中,我們會發現一個嵌套或嵌套最多的陣列或物件可以包含多個鍵值對、嵌套、陣列或物件。在遇到這種情況時,可以使用這種語法來建構新的 陣列或物件。

範例程式碼:

<?php
//嵌套数组和对象的例子
$person = array(
   &#39;name&#39; => 'jack',
   'age' => 18,
   'city' => 'beijing',
   'hobby' => array(
       'reading',
       'music',
       'sports',
       'travel'
   ),
   'friends' => array(
       array(
           'name' => 'tom',
           'phone' => '13812999010'
       ),
       array(
           'name' => 'lily',
           'phone' => '13812999020'
       )
   )
);
//使用json_encode()的方式将$person数组转换为json格式字符串
echo json_encode($person);
?>

輸出結果:

{"name":"jack","age":18,"city":"beijing","hobby":["reading","music","sports","travel"],"friends":[{"name":"tom","phone":"13812999010"},{"name":"lily","phone":"13812999020"}]}

可以看到,json_encode()函數支援巢狀數組和對象,這對於一些比較複雜的資料格式而言是非常方便實用的。

$b. $options參數

$options參數用來指定如何轉換物件和陣列。例如,如果想要在輸出的json字串中停用UTF-8編碼,則可以使用JSON_UNESCAPED_UNICODE選項。此選項使輸出中的所有非英文字元均以其原始表示出現。

範例程式碼:

<?php
$person = array(
   &#39;name&#39; => 'jack',
   'age' => 18,
   'city' => 'beijing'
);

echo json_encode($person, JSON_UNESCAPED_UNICODE);
?>

輸出結果:

{"name":"jack","age":18,"city":"beijing"}

$c. $depth參數

$depth參數用來指定物件或陣列在轉換為json字串之前的最大深度,此參數大於0有效,否則無效。如果資料深度超過了指定的深度,則json_encode()函數將傳回FALSE。預設情況下,$depth參數為512。

範例程式碼:

<?php
$person = array(
   &#39;name&#39; => 'jack',
   'age' => 18,
   'city' => 'beijing',
   'hobby' => array(
       'reading',
       'music',
       'sports',
       'travel'
   ),
   'friends' => array(
       array(
           'name' => 'tom',
           'phone' => '13812999010'
       ),
       array(
           'name' => 'lily',
           'phone' => '13812999020'
       )
   )
);

echo json_encode($person, JSON_PRETTY_PRINT, 3);
?>

輸出結果:

{
   "name": "jack",
   "age": 18,
   "city": "beijing",
   "hobby": [
       "reading",
       "music",
       "sports",
       "travel"
   ],
   "friends": [
       {
           "name": "tom",
           "phone": "13812999010"
       },
       {
           "name": "lily",
           "phone": "13812999020"
       }
   ]
}

我們可以看到,透過使用JSON_PRETTY_PRINT和$depth參數,輸出的json字串將格式化並且整個對象將被縮排。

$d. $reserved參數

$reserved參數指定當物件或陣列中的成員名稱與php保留字衝突時應採取的措施。預設的措施是添加一個底線。此參數只有在以JSON_FORCE_OBJECT作為選項時才生效。

三. 例外處理

當使用json_encode()函數進行JSON編碼時,可能會出現一些例外情況,這些情況需要特殊處理,否則會導致json_encode()函數無法正常運作。

$a. 編碼問題

如果想在$person的name鍵中嵌入一個ISO-8859-1編碼的非unicode字串,json_encode()將會失敗。但是,如果將相關字串轉換為Unicode,則可以正常編碼。

範例程式碼:

<?php
$data = array(
   "name" => "Manfred",
   "age" => "31",
   "city" => "车里雅宾斯克",
   "UTF8" => "こんにちは"
);

foreach ($data as $key => $value) {
   if (!mb_detect_encoding($value, 'utf-8', true)) {
       $data[$key] = mb_convert_encoding($value, 'UTF-8', 'ISO-8859-1');
   }
}

echo json_encode($data);
?>

輸出結果:

{"name":"Manfred","age":"31","city":"\u8f66\u91cc\u96c6\u5bbe\u65af\u514b","UTF8":"こんにちは"}

可以看到,在將ISO-8859-1字串轉換為UTF-8字串之後,json_encode( )函數成功將物件轉換為了JSON格式。

$b. UTF-8 BOM頭問題

如果你在物件陣列中包含以UTF-8 BOM頭編碼的字串,那麼json_encode()函數將不起作用。因此,在編寫包含BOM頭編碼的程式時,應該手動刪除BOM頭,以便在使用json_encode()函數時不會出現問題。

c. 多位元組數組問題

json_encode()函數只接受正確的UTF-8字串,而不接受其他多位元組編碼方案。如果物件陣列中包含了這些編碼方案,則需要使用mb_convert_encoding()函數將它們轉換為UTF-8字串。

範例程式碼:

<?php
$array = [&#39;你好&#39;, &#39;こんにちは&#39;, &#39;Привет&#39;];
$json = json_encode($array);
echo $json;

// Error: Malformed UTF-8 characters, possibly incorrectly encoded

輸出結果:

Error: Malformed UTF-8 characters, possibly incorrectly encoded

這裡我們可以看到,由於將多位元組數組轉換為json字串導致了異常,我們可以透過使用mb_convert_encoding()來解決這個問題。

範例程式碼:

<?php
$array = [&#39;你好&#39;, &#39;こんにちは&#39;, &#39;Привет&#39;];
$json = json_encode(array_map(function ($str) {
   return mb_convert_encoding($str, &#39;UTF-8&#39;, &#39;UTF-8&#39;);
}, $array));
echo $json;
?>

輸出結果:

["你好","こんにちは","Привет"]

總之,json_encode()是一個非常方便的函數,可以幫助我們將物件陣列轉換為json格式的字符串。在使用中,需要清楚了解常見問題的解決方法,以便更好地使用該函數。

以上是php怎麼將物件數組轉為json格式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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