- 目录
- 1. 前言
- 2. JSON基本语法
- 2.1 JSON四大基本原则
- 2.2 JSON的优缺点
- 2.2.1JSON的优点
- 2.2.2JSON的缺点
- 2.3JSON的使用
- 2.3.1 JSON数据格式和serialize数据格式的异同和使用
- 2.3.2PHP操作函数加解密JSON
- 2.4JSON实例讲解
- 2.4.1一维数组到JSON数据格式的转换
- 2.4.2多维数组到JSON数据格式的转换
- 2.4.3对象到JSON数据格式的转换
- 2.4.4转换JSON数据格式到对象类型
- 2.4.5转换JSON数据格式到数组类型
- 3. 总结
1.前言
JSON就是javascript object notation,是一种轻量级的数据交换格式。
2.JSON基本语法
2.1 JSON四大基本原则
- 并列的数据之间用逗号(“,”)分割。
- 映射用冒号(“:”)表示。
- 并列数据的集合(数组)用方括号(“[]”)表示。
- 映射的集合(对象)用大括号(“{}”)表示。
比如:
[ {“城市”:”广州”,”编号”:1009}, {“城市”:”深圳”,”编号”:1010} ]
2.2 JSON的优缺点
2.2.1JSON的优点
数据格式简单,易于读写,格式都是压缩的,占用带宽小。
支持多种语言,包括C、C#、ColdFusion、Java、javaScript、php等服务端语言,便于解析和不同语言之间的通信。
2.2.2JSON的缺点
要求字符集必须是unicode,约束强。
语法过于严谨,必须遵循语法四个原则。
2.3JSON的使用
2.3.1 JSON数据格式和serialize数据格式的异同和使用
相同点
都是把其他数据类型转换成可以传输的字符串。
都是结构性数据。
不同点
serialize序列化后数据格式保存数据原有类型。
json数据格式要更加简洁。
使用场景
json适合数据量大,不要求保留原有数据类型的情况下使用。
serialize适合存储带有加密方式的数据串,防止数据被中途截取反序列化破解。
2.3.2PHP操作函数加解密JSON
- 加密:json_encode()
- 解密:json_decode()
2.4JSON实例讲解
2.4.1一维数组到JSON数据格式的转换
其中索引数组定义
<?php $array=array('name','age'); echo json_encode($array); ?>
返回数组:
["name","age"]
其中关联数组定义
$array=array(1=>‘name’,2=>’age’);
返回对象:
{"1":"name","2":"age"}
2.4.2多维数组到JSON数据格式的转换
其中多维索引数组定义
<?php $array=array( 1=>[ 'fangzhijie', 'nan' ], 2=>'age' ); echo json_encode($array); ?>
返回对象,对象里面包含数组:
{"1":["fangzhijie","nan"],"2":"age"}
其中多维关联数组定义
<?php $array=array( 1=>[ 1=>'fangzhijie', 2=>'nan' ], 2=>'age' ); echo json_encode($array); ?>
返回对象:
{"1":{"1":"fangzhijie","2":"nan"},"2":"age"}
2.4.3对象到JSON数据格式的转换
<?php class test{ public $name='fangzhijie'; private $age=23; protected $sex='nan'; public function getName(){ return $this->name(); } } echo json_encode(new test()); ?>
返回对象:
{"name":"fangzhijie"}
注意:对象转换为json数据,只转换公有变量,私有变量不转换。
2.4.4转换JSON数据格式到对象类型
<?php $jsonStr = '{"1":{"1":"fangzhijie","2":"nan"},"2":"age"}'; print_r(json_decode($jsonStr)); ?>
返回对象:
stdClass Object ( [1] => stdClass Object ( [1] => fangzhijie [2] => nan ) [2] => age )
2.4.5转换JSON数据格式到数组类型
<?php $jsonStr = '{"1":{"1":"fangzhijie","2":"nan"},"2":"age"}'; print_r(json_decode($jsonStr,1)); ?>
返回数组:
Array ( [1] => Array ( [1] => fangzhijie [2] => nan ) [2] => age )
注意:把json字符串变成数组,需要在第二个参数true
3.总结
通过本次学习,对json的转换有了更进一步的认识,无论是数组OR对象转json、还是json转数组OR对象,我们都基本掌握了其方法,并且清楚认识到数组转换为json字符串受到数组类型(索引OR关联)的影响,这个坑在以后的开发中需要注意。