首頁 php教程 php手册 在PHP语言中使用JSON和将json还原成数组

在PHP语言中使用JSON和将json还原成数组

Jun 06, 2016 pm 07:43 PM
json php 使用 陣列

在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考。内容如下 从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。 一、json_encode() 1 2 3 4 ?php $arr = ar

在之前我写过php返回json数据简单实例,刚刚上网,突然发现一篇文章,也是介绍json的,还挺详细,值得参考。内容如下

从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。

一、json_encode()

1

2

3

4

<?php

$arr array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);

echo json_encode($arr);

?>

输出

1

{"a":1,"b":2,"c":3,"d":4,"e":5}

 

再看一个对象转换的例子:

1

2

3

4

5

6

$obj->body           = 'another post';

$obj->id             = 21;

$obj->approved       = true;

$obj->favorite_count = 1;

$obj->status         = NULL;

echo json_encode($obj);

 输出

1

2

3

4

5

6

7

8

9

10

11

{

   "body":"another post",

 

   "id":21,

 

   "approved":true,

 

   "favorite_count":1,

 

   "status":null

 }

 由于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)转为对象格式。

比如,现在有一个索引数组

1

2

3

$arr = Array('one''two''three');

 

echo json_encode($arr);

 输出

1

["one","two","three"]

 如果将它改为关联数组:

1

2

3

$arr = Array('1'=>'one''2'=>'two''3'=>'three');

 

echo json_encode($arr);

 输出变为

1

{"1":"one","2":"two","3":"three"}

 注意,数据格式从"[]"(数组)变成了"{}"(对象)。

如果你需要将"索引数组"强制转化成"对象",可以这样写

1

json_encode( (object)$arr );

 或者

1

json_encode ( $arr, JSON_FORCE_OBJECT );

 三、类(class)的转换

下面是一个PHP的类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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转换:

1

2

3

4

5

$foo new Foo;

 

$foo_json = json_encode($foo);

 

echo $foo_json;

 输出结果是

1

{"public_ex":"this is public"}

 可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。

四、json_decode()

该函数用于将json文本转换为相应的PHP数据结构。下面是一个例子:

1

2

3

4

5

$json '{"foo": 12345}';

 

$obj = json_decode($json);

 

print $obj->{'foo'}; // 12345

 通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如:

1

2

3

$json '{"a":1,"b":2,"c":3,"d":4,"e":5}';

 

var_dump(json_decode($json));

 结果就是生成一个PHP对象:

1

2

3

4

5

6

7

8

9

10

object(stdClass)#1 (5) {

 

  ["a"] => int(1)

  ["b"] => int(2)

  ["c"] => int(3)

  ["d"] => int(4)

  ["e"] => int(5)

 

}

 如果想要强制生成PHP关联数组,json_decode()需要加一个参数true:

1

2

3

$json '{"a":1,"b":2,"c":3,"d":4,"e":5}';

  

 var_dump(json_decode($json,true));

 结果就生成了一个关联数组:

1

2

3

4

5

6

7

8

9

10

array(5) {

 

   ["a"] => int(1)

   ["b"] => int(2)

   ["c"] => int(3)

   ["d"] => int(4)

   ["e"] => int(5)

 

}

五、json_decode()的常见错误

下面三种json写法都是错的,你能看出错在哪里吗?

1

2

3

4

5

$bad_json "{ 'bar': 'baz' }";

 

$bad_json '{ bar: "baz" }';

 

$bad_json '{ "bar": "baz", }';

 对这三个字符串执行json_decode()都将返回null,并且报错。

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。

另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。

1

var_dump(json_decode("Hello World")); //null

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡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

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

熱門文章

熱工具

記事本++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教學
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
作曲家:通過AI的幫助開發PHP 作曲家:通過AI的幫助開發PHP Apr 29, 2025 am 12:27 AM

AI可以幫助優化Composer的使用,具體方法包括:1.依賴管理優化:AI分析依賴關係,建議最佳版本組合,減少衝突。 2.自動化代碼生成:AI生成符合最佳實踐的composer.json文件。 3.代碼質量提升:AI檢測潛在問題,提供優化建議,提高代碼質量。這些方法通過機器學習和自然語言處理技術實現,幫助開發者提高效率和代碼質量。

session_start()函數的意義是什麼? session_start()函數的意義是什麼? May 03, 2025 am 12:18 AM

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

如何使用MySQL的函數進行數據處理和計算 如何使用MySQL的函數進行數據處理和計算 Apr 29, 2025 pm 04:21 PM

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

作曲家:PHP開發人員的軟件包經理 作曲家:PHP開發人員的軟件包經理 May 02, 2025 am 12:23 AM

Composer是PHP的依賴管理工具,通過composer.json文件管理項目依賴。 1)解析composer.json獲取依賴信息;2)解析依賴關係形成依賴樹;3)從Packagist下載並安裝依賴到vendor目錄;4)生成composer.lock文件鎖定依賴版本,確保團隊一致性和項目可維護性。

MySQL的字符集和排序規則如何配置 MySQL的字符集和排序規則如何配置 Apr 29, 2025 pm 04:06 PM

在MySQL中配置字符集和排序規則的方法包括:1.設置服務器級別的字符集和排序規則:SETNAMES'utf8';SETCHARACTERSETutf8;SETCOLLATION_CONNECTION='utf8_general_ci';2.創建使用特定字符集和排序規則的數據庫:CREATEDATABASEexample_dbCHARACTERSETutf8COLLATEutf8_general_ci;3.創建表時指定字符集和排序規則:CREATETABLEexample_table(idINT

怎樣在C  中使用type traits? 怎樣在C 中使用type traits? Apr 28, 2025 pm 08:18 PM

typetraits在C 中用於編譯時類型檢查和操作,提升代碼的靈活性和類型安全性。 1)通過std::is_integral和std::is_floating_point等進行類型判斷,實現高效的類型檢查和輸出。 2)使用std::is_trivially_copyable優化vector拷貝,根據類型選擇不同的拷貝策略。 3)注意編譯時決策、類型安全、性能優化和代碼複雜性,合理使用typetraits可以大大提升代碼質量。

如何在MySQL中重命名數據庫 如何在MySQL中重命名數據庫 Apr 29, 2025 pm 04:00 PM

MySQL中重命名數據庫需要通過間接方法實現。步驟如下:1.創建新數據庫;2.使用mysqldump導出舊數據庫;3.將數據導入新數據庫;4.刪除舊數據庫。

如何在C  中實現單例模式? 如何在C 中實現單例模式? Apr 28, 2025 pm 10:03 PM

在C 中實現單例模式可以通過靜態成員變量和靜態成員函數來確保類只有一個實例。具體步驟包括:1.使用私有構造函數和刪除拷貝構造函數及賦值操作符,防止外部直接實例化。 2.通過靜態方法getInstance提供全局訪問點,確保只創建一個實例。 3.為了線程安全,可以使用雙重檢查鎖定模式。 4.使用智能指針如std::shared_ptr來避免內存洩漏。 5.對於高性能需求,可以使用靜態局部變量實現。需要注意的是,單例模式可能導致全局狀態的濫用,建議謹慎使用並考慮替代方案。

See all articles