Jadual Kandungan
 json_decode与json_encode都是json字符串,本文主要和大家分享PHP中 json_decode与json_encode使用方法,希望能帮助到大家。
一、json_encode()
索引数组和关联数组
类(class)的转换
二、json_decode()
json_decode()的常见错误
三、javascript 使用json 字符串
Rumah pembangunan bahagian belakang tutorial php PHP中json_decode与json_encode使用方法分享

PHP中json_decode与json_encode使用方法分享

Mar 01, 2018 pm 02:05 PM
decode encode javascript

 json_decode与json_encode都是json字符串,本文主要和大家分享PHP中 json_decode与json_encode使用方法,希望能帮助到大家。

一、json_encode()

该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  echo json_encode($arr); 
Salin selepas log masuk

结果为

{"a":1,"b":2,"c":3,"d":4,"e":5} 
Salin selepas log masuk

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

$obj->body      = 'another post';  $obj->id       = 21;  $obj->approved    = true;  $obj->favorite_count = 1;  $obj->status     = NULL;  
echo json_encode($obj); 
Salin selepas log masuk

结果为

{    
    "body":"another post",  
  "id":21,  
  "approved":true,  
  "favorite_count":1,  
  "status":null  
  }
Salin selepas log masuk

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

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

$arr = Array('one', 'two', 'three');  echo json_encode($arr); 
Salin selepas log masuk

结果为:

[“one”,”two”,”three”]

如果将它改为关联数组:

$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');echo json_encode($arr); 
Salin selepas log masuk

结果就变了:

{“1”:”one”,”2”:”two”,”3”:”three”}

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

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

json_encode( (object)$arr ); 
Salin selepas log masuk

或者

json_encode ( $arr, JSON_FORCE_OBJECT ); 
Salin selepas log masuk
类(class)的转换

下面是一个PHP的类:

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;  
    }  
  }
Salin selepas log masuk

现在,对这个类的实例进行json转换:

$foo = new Foo;  $foo_json = json_encode($foo);  echo $foo_json; 
Salin selepas log masuk

输出结果是

{"public_ex":"this is public"}
Salin selepas log masuk

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

二、json_decode()

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

$json = '{"foo": 12345}';
   $obj = json_decode($json);  print $obj->{'foo'}; // 12345 
Salin selepas log masuk

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

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
Salin selepas log masuk

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

object(stdClass)#1 (5) {    ["a"] => int(1)    ["b"] => int(2)    ["c"] => int(3)    ["d"] => int(4)    ["e"] => int(5)  
} 
Salin selepas log masuk

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

$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
 
var_dump(json_decode($json,true)); 
Salin selepas log masuk

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

array(5) {  
   ["a"] => int(1)     ["b"] => int(2)     ["c"] => int(3)     ["d"] => int(4)     ["e"] => int(5)  
} 
Salin selepas log masuk
json_decode()的常见错误

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

$bad_json = "{ 'bar': 'baz' }";  
$bad_json = '{ bar: "baz" }';  
$bad_json = '{ "bar": "baz", }'; 
Salin selepas log masuk

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

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

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

三、javascript 使用json 字符串

JSON字符串转换为JSON对象的方法

使用下面的方法先转化为JSON对象:

//由JSON字符串转换为JSON对象var obj = eval('(' + str + ')');
Salin selepas log masuk

或者

var obj = str.parseJSON(); //由JSON字符串转换为JSON对象
Salin selepas log masuk

或者

var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
Salin selepas log masuk

然后,就可以这样读取:

Alert(obj.name);Alert(obj.sex);
Salin selepas log masuk

特别注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题(抛出语法异常)。

相关推荐:

php中关于json_decode无法解析特殊问号字符的解决

PHP怎样实现json_decode不转义中文方法介绍

对比json_encode和json_decode的区别

Atas ialah kandungan terperinci PHP中json_decode与json_encode使用方法分享. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 pm 02:54 PM

Bagaimana untuk melaksanakan sistem pengecaman pertuturan dalam talian menggunakan WebSocket dan JavaScript

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata Dec 17, 2023 pm 05:30 PM

WebSocket dan JavaScript: teknologi utama untuk melaksanakan sistem pemantauan masa nyata

Penggunaan lanjutan dan perkongsian kemahiran fungsi Oracle DECODE Penggunaan lanjutan dan perkongsian kemahiran fungsi Oracle DECODE Mar 08, 2024 am 10:30 AM

Penggunaan lanjutan dan perkongsian kemahiran fungsi Oracle DECODE

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript Dec 17, 2023 am 09:39 AM

Bagaimana untuk melaksanakan sistem tempahan dalam talian menggunakan WebSocket dan JavaScript

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata Dec 17, 2023 pm 12:09 PM

Cara menggunakan JavaScript dan WebSocket untuk melaksanakan sistem pesanan dalam talian masa nyata

Fungsi Oracle DECODE penjelasan terperinci dan contoh penggunaan Fungsi Oracle DECODE penjelasan terperinci dan contoh penggunaan Mar 08, 2024 pm 03:51 PM

Fungsi Oracle DECODE penjelasan terperinci dan contoh penggunaan

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP Jan 05, 2024 pm 06:08 PM

Tutorial JavaScript Mudah: Cara Mendapatkan Kod Status HTTP

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap Dec 17, 2023 pm 05:13 PM

JavaScript dan WebSocket: Membina sistem ramalan cuaca masa nyata yang cekap

See all articles