Json - 学习/实践

Json介绍

1.php中的Json简介

1. 学习目的

1.掌握并且能使用Json数据格式进行通信交互

2.理解Json数据格式和serialize序列化,XML以及数组的区别

2. Json起源

21世纪初, Douglas Crockford寻找一简便的数据交互格式,能够在服务器之间交换数据.当时通用的数据交换语言是XML,但是Douglas Crockford觉得XML的生成和解析都太麻烦,所以他提出了一种简化格式,也就是Json.

Json的规格非常简单,只用一个页面几百个字就能说清楚,而且Douglas Crockford声称这个规格永远不必升级,因为该规定的都规定了.

 

分享:

首先,不管做什么开发,比如说c++ ,Java,php 等等,他们都离不开三种数据类型,此处的数据类型不是指的是我们程序中数据类型,不是string, int之类的,它是一种统称总结起来的类型,这三种类型可以涵盖大部分的语言.

 

第一种数据类型:标量(scalar),也就是一个单数的字符串(string)或者数字(numbers),比如”北京”这个单独的词.

第二种数据类型:序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫数组(array)或者列表(list),比如”北京,上海”.

第三种数据类型:映射(mapping),也就是一个名/值对(name/value),即数据有一个名称,还有一个相对应的值,这又称作散列(hash)或者字典(dictionary),比如”首都: 北京”

3. 什么是Json

Json就是JavaScript object notation (JavaScript对象表示),它是一种轻量级的数据交换格式.

以下的语句即Json

{“name”:”Eric”,”age”:24}

{“first”:{“name”:”Eric”, ”age”:24},”second”:{“name”:”yuanminghe”,”age”:24}}

4. Json的基本语法

Json的四个基本原则  //遵守一种约束,学习一门语言或者一门技能会事半功倍

(1)     并列的数据之间用逗号(“,”)分隔.

(2)     映射用冒号(“:”)表示.

(3)     并列数据的集合(数组)用方括号(“[]”)表示.

(4)     映射的集合(对象)用大括号(“{}”)表示

简单记法: 如果是复数就用[{}],如果是单数就用{}

举例:

“北京市的面积为16800平方公里,常驻人口1600万人.上海市的面积为6400平方公里,常住人口1800万”

转换为json格式之后:

[

     Key     value         Key    value       Key    value

     {“城市”:”北京”,”面积”:16800,”人口”:1600}

     {“城市”:”上海”,”面积”:6400,”人口”:1800}

]

5. Json的优点和缺点

优点:

1.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小.

2.支持多种语言,包括ActionScript,C,C#,ColdFusion,Java,JavaScript.Perl.PHP.Python,Ruby等服务器端语言,便于服务器端的解析.

// 因为json这个数据格式在创造的时候,它就已经符合一种规范,相当于和C或者其他语言签好了合同,以后你们的json格式也要用这种,所以说json跨平台的东西.

缺点:

// 一个好的东西,不会哪个方面都是好的.一个好的东西,也会有反面的东西.

1.要求字符集,必须是Unicode,受约束性强.//原因是,如果是非Unicode字符集,将会产生空或者乱码或者是我们不想得到的结果.

2.语法过于严谨,必须遵循json语法的四分原则. //但是也正是因为语法严谨,json才能是一个轻量级的框架,如果每个人都是一个样子,一个风格,将会是一个非常糟糕的事情,.同时也不利用学习和深入理解.

6. 相提并论

XML

XML是标准通用标记语言(SGM)的子集,非常适合web传输. // 早期非常受欢迎,可以解析出树形的结构化数据,但是在传输的过程中第一是数据文档比较大, 第二个是读起来会比较费劲, 原因是xml中都是自己定义的节点,这一部分, 详细可另外查看文档.

XML提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据.

Json

JSON基于JavaScript programming language,standard ECMA-262 3rd Edition – Demeber 1999的一个子集

Serialize

Serialize是一种类似json的数据格式, 但是PHP的Serialize是将变量序列化, 返回一个具有变量类型和结构的字符串表达式. // 相当于json, 但是比json更复杂.

Array()

基本数据类型,不能用于数据的传输和交互

原因是array是一种标准的基本的数据类型,它只能处理我们的逻辑和存储我们的数据在我们的缓存当中,array的结构相当于是一个key, 一个value或者一个默认的key或者一个默认的value, 此处的json, serialize, xml都可以通过array进行转换, 因为array是一个基础的数据类型.

2. 怎么使用Json

1. json数据格式和serialize数据格式的异同和使用

相同点:

1.都是把其他数据类型转换成一个可以传输的字符串

2.都是结构性数据

备注:

资源类型是不可以转换成json数据格式或者serialize数据格式的,因为资源是一个类似一个文件的标识.

不同点:

1.serialize序列化后的数据格式,保存数据原有类型.

2.json数据格式要更简洁相比serialize序列化之后的数据格式//原因是json数据格式中没有多余的字符串和也没有多余的数据类型,它只有一个简洁的数据格式.

使用场景

1. json适合数据量大,不要求保留原有数据类型的情况下使用.

2. serialize适合存储带有加密方式的数据串,防止数据中途别截取,反序列化破解

列子如下:

$array = [“username”,”age”];

[“username”,”age”]  ----- > json

a:2:{i:0;s:8:”username”;i:1;s:3:”age”} ---->serialize

2. PHP中操作json的重要函数

编码:

json_encode()  

详见 PHP: json_encode - Manual

<?php

$b = array();

echo "Empty array output as array: ", json_encode($b), "\n";
echo "Empty array output as object: ", json_encode($b, JSON_FORCE_OBJECT), "\n\n";

// 输出 【之前不知道

Empty array output as array: []
Empty array output as object: {}

json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) : string

备注: [, int $options = 0 [, int $depth = 512 ]]  //可任选一个参数写,也可以都写

value

待编码的 value ,除了resource 类型之外,可以为任何数据类型

所有字符串数据的编码必须是 UTF-8

Note:

PHP implements a superset of JSON as specified in the original » RFC 7159.

options

由以下常量组成的二进制掩码:JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR。 关于 JSON 常量详情参考JSON 常量页面。

depth

设置最大深度。 必须大于0。

解编码:

json_docode()

3. 一维数组到json数据格式的转换

json中使用引号,必须是双引号,否则可能出错.

json_encode($array);

4. 多维数组到json数据格式的转换

json_encode($array);//同一维数组转json格式是一样的

5. 对象到json数据格式的转换

这个是实际开发中不是很常用, 因为json是一个简单的数据化转换, 它使一个能数组或者对象转换成一个能传输的字符串, 但是一个类, (这里数据类型中的对象和类的实例化的对象似乎是同一个东西) 整体来讲,没有太大的意义, 一个类能做的事情,数组基本能满足我们平常的要求了, 除非我们是数据库操作, 返回结果是对象类型, 那么这块可能会有些用处.

6.如何解析一个json数据格式

使用json_decode()函数, 转换结果可能为对象或者数组, 跟第二个参数有关.

7. 转换json数据格式到对象类型

json_decode($json);  // 第二个参数默认为false

8. 转换json数据格式到数组类型

json_decode($json,true); 

3. Json实战(一):使用JavaScript Ajax初始化网站基本信息

TBD

4. Json实战(二):使用JavaScript Ajax通信操作Json 

TBD

5. Json使用过程中常见的错误.

采坑填坑更多

Json遇坑/填坑_william_n的博客-CSDN博客

1. json中不能使用单引号,如:{'test':'test'}  // 不合法 // 也不能使用注释

2. 采用utf-8编码,中文会被转码,// 同时不能使用utf-8 BOM编码格式

<?php

$test = ['测试'];
$test = json_encode($test);
var_dump($test);

//输出

string(16) "["\u6d4b\u8bd5"]"

3.(PHP)对空字符串进行解码,得到NULL

如下:

<?php

$test = '';
$test = json_decode($test,1);
var_dump($test);

// 输出

NULL

详细参见文档:【php】

PHP: json_encode - Manual

JsonSerializable
json_decode() - 对 JSON 格式的字符串进行解码
json_last_error() - 返回最后发生的错误  //会用到
serialize() - 产生一个可存储的值的表示

6.参考

https://www.imooc.com/learn/68

Json遇坑/填坑_william_n的博客-CSDN博客  //Json遇坑/填坑

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值