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遇坑/填坑

后续补充

...

Json - 学习/实践相关推荐

  1. PHP 8 - 学习/实践

    1.应用场景 了解关注体验最新PHP 8的版本特性,以便在项目中使用. 2.学习/操作 1. 文档阅读 PHP: Hypertext Preprocessor PHP 8 确认支持 JIT - OSC ...

  2. MySQL - 学习/实践 - 多多翻阅补充

    1.应用场景 学习, 实践MySQL. 结合使用MySQL高效开发项目. 2.学习/操作 1. 文档/书籍 官方手册  // 推荐 --- 解决问题以及验证结论  最终还是回到官方手册. https: ...

  3. 【Alink-Python版本】学习实践-数据源、数据处理、回归、分类、聚类

    [Alink]学习&实践-数据源.数据处理.回归.分类.聚类 Alink学习链接汇总 1.数据源读取 1.1.读取CSV文件(分批流) 1.2.按行读入文件(分批流) 1.3.读取Kafka数 ...

  4. 安装gym库_强化学习Gym库学习实践(一)

    最近看了一篇研究方向相关的文章,介绍了一种DQN的应用,感觉还挺新鲜的.想着把这篇文章复现出来,就开始学习强化学习的相关知识,作为一名小白,这一路走的可是真的十分艰难(我太菜了啊!) 看了莫烦Pyth ...

  5. 人工智能最佳学习实践

    人工智能是什么? 这不是一个容易回答的问题,因为他还处于发展阶段,没有成熟的理论体系. 回想下人类经历过的技术革 命.我们人类采用科学方法论(scientific method) (观察,假设,实验, ...

  6. 系列 《使用sklearn进行集成学习——理论》 《使用sklearn进行集成学习——实践》 目录 1 Random Forest和Gradient Tree Boosting参数详解 2 如何调参?

    系列 <使用sklearn进行集成学习--理论> <使用sklearn进行集成学习--实践> 目录 1 Random Forest和Gradient Tree Boosting ...

  7. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略

    DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文).CNN优化技术.调参学习实践.CNN经典结构.案例应用之详细攻略 目录 卷积神经网络算法的简介 0.Biologically Ins ...

  8. 【赠书】掌握人工智能重要主题,深度强化学习实践书籍推荐

    ‍‍ 今天要给大家介绍的书是深度强化学习实践的第二版,本书的主题是强化学习(Reinforcement Learning,RL),它是机器学习(Machine Learning,ML)的一个分支,强调 ...

  9. CVer入门必备:计算机视觉的深度学习实践

    <计算机视觉的深度学习实践>  原价     ¥ 899.00 现超 300人报名 已至底价     ¥ 399.00  >>  点击文末阅读原文参团  << 参团 ...

最新文章

  1. 精简JRE第二步 ─ 精简lib目录
  2. Oracle数据库名,实例名,服务名的区别
  3. 使用Java 8 Streams进行编程对算法性能的影响
  4. 小程序支付api密钥_如何避免在公共前端应用程序中公开您的API密钥
  5. Citrix XenServer 池要求
  6. php json转义字符函数,PHP转义Json里的特殊字符的函数
  7. php inputcsv,php实现CSV文件导入和导出
  8. 应用题分析思路--关注点分离
  9. JS中style属性
  10. WPF备忘录(1)有笑脸,有Popup
  11. 【离散数学】第五版前四章知识网图
  12. 仿安居客好租网房产源码
  13. 微师电脑客户端 附使用教程
  14. html 图片 透明颜色,CSS实现图片变灰色及透明度
  15. 折线图-面积图-K线图
  16. 数据从hana倒回Oracle的方法,SAP HANA SLT 将Oracle表 数据同步到HANA数据库
  17. 荧光定量PCR的优点和检测方法盘点
  18. [机器学习] --- 红楼梦后四十回到底是谁写的?机器学习分析法
  19. Windows搭建FTP服务器,JAVA实现读写功能
  20. 中国智能行车记录仪行业发展现状及趋势分析,DMS将替代DVR

热门文章

  1. 什么是编码?什么是解码?为什么要编码.解码?
  2. 51单片机c语言直流电机廷迟启停,51单片机控制直流电机不会加定时器延时程序...
  3. 接口测试 | 如何高效管理接口文档
  4. 开源SSL加快器的构建
  5. vue实现仿网易云音乐客户端
  6. typec扩展坞hdmi没反应_解决电脑接口不足难题,实测绿联九合一type-c扩展坞到底有多强...
  7. 校招群面及专业面技巧总结(适用产品等非技术岗)
  8. Hadoop HA (四) --------- YARN-HA 配置
  9. SDR技术原理解析 USRP收发原理
  10. 用Python玩转数据(三)