数据类型和Json格式_第1页
数据类型和Json格式_第2页
数据类型和Json格式_第3页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 10数据类型和 Json 阮一峰1.前几天,我才知道有一种简化的数据交换格式,叫做yaml。茅塞顿开。三种类型:第一种类型是标量scalar,也就是一个单独的字符串strin或数字number其次种类型是序列sequence,也就是假设干个相关的数据arra比方“北京,上海“。第三种类型是映射mapping, 也就是一个名/Name/value这又称作散列has或字典dictionary“。程语言中,只要有了数组array和对象object就能够储存一切数据了。2.我马上想到了 json。式,能够在效劳器之间交换数据。当时通用的数据交换语言是XML,但是DouglasCrockfordXML

2、Json。DouglasCrockford定的都规定了。并列的数据之间用逗号“, “分隔。映射用冒号“: “表示。并列数据的集合数组用方括号(“)表示。映射的集合对象用大括号“表示。上面四条规章,就是 Json格式的全部内容。比方,下面这句话:160064001800“城市“:“北京“,“面积“:16800,“人口“:1600,“城市“:“上海“,“面积“:6400,“人口“:1800假设事先知道数据的构造,上面的写法还可以进一步简化:“北京“,16800,1600,“上海“,6400,1800 xml,成为了互联网上最受欢送的数据交换格式。 json3.学习 javascript 的时候,我

3、曾经一 度搞不清楚 “ 数组“(object表示数据的集合。a=1,2,3,4a=0:1,1:2,2:3,3:4,然后你运行 alert(a1),两种状况下也可以用对象表示,那么我到底该用哪一种呢?4.namename。但是问题是,很多编程语言中,都有一种叫做 “关联数组“array的东西。这种数组中的数据是知名称的。javascriptvar a=“城市“:“北京“,“面积“:16800,“人口“:1600;但是,也可以定义成一个关联数组:a“城市“=“北京“;a“面积“=16800;a“人口“=1600;这起初也加剧了我对数组和对象的混淆,后来才明白,在Javascriptphpphpva

4、r a=1,2,3,4;a”foo”=”Hello World”;alert(a.length);4php5a5完PHPJSON 阮一峰日期: 2022114目前,JSON 已经成为最流行的数据交换格式之一,各大网API今日,我想总结一下 PHPAPI必需了解的学问。从5.2版本开头,PHP原生供给json_encode和json_decode函数,前者用于编码,后者用于解码。一、json_encodejson个数组转换的例子:$arr = array (”a”=1,”b”=2,”c”=3,”d”=4,”e”=5);echo json_encode($arr);结果为“a“:1,“b“:2,“

5、c“:3,“d“:4,“e“:5再看一个对象转换的例子:$obj-body= ”another post”;$obj-id= 21;$obj-approved= true;$obj-favorite_count = 1;$obj-status= NULL;echo json_encode($obj);结果为“body“:“another post“,“id“:21,“approved“:true, “favorite_count“:1,“status“:nulljsonutf-8json_encodeutf-8null。当中ISO-8859-1一点要特别留意。二、索引数组和关联数组PHP 支持

6、两种数组,一种是只保存“值“value的索引数组indexed array“名值对name/value关联数组associativearray。由于 javascript 不支持关联数组,所以 json_encode只将索引数组 indexed array转为数组格式,而将关联数组associative array转为对象格式。比方,现在有一个索引数组$arr = Array(”one”, ”two”, ”three”);echo json_encode($arr);结果为:“one“,“two“,“three“假设将它改为关联数组:$arr = Array(”1”=”one”, ”2”=”t

7、wo”, ”3”=”three”);echo json_encode($arr);结果就变了:“1“:“one“,“2“:“two“,“3“:“three“留意,数据格式从“数组变成了“对象。假设你需要将“索引数组“强制转化成“对象“,可以这样写json_encode( (object)$arr );或者json_encode ( $arr, JSON_FORCE_OBJECT );三、类class的转换PHPclass Foo constERROR_CODE = ”404”;public$public_ex = ”this is public”; private$private_ex = ”

8、this is private!”;protected $protected_ex = ”this should be protected”;public function getErrorCode return self:ERROR_CODE;现在,对这个类的实例进展 json 转换:$foo = new Foo;$foo_json = json_encode($foo);echo $foo_json;输出结果是“public_ex“:“this is public“可以看到,除了公开变量publi,其他东西有变量、方法等等都遗失了。四、json_decodePHP是一个例子:$json =

9、 ”“foo“: 12345”;$obj = json_decode($json); print $obj-”foo”; / 12345PHP是数组。比方:$json = ”“a“:1,“b“:2,“c“:3,“d“:4,“e“:5”;var_dump(json_decode($json);结果就是生成一个 PHP 对象:object(stdClass)#1 (5) “a“ = int(1)“b“ = int(2)“c“ = int(3)“d“ = int(4)“e“ = int(5)PHP,json_decode需要加一true:$json = ”“a“:1,“b“:2,“c“:3,“d“:

10、4,“e“:5”;var_dump(json_decode($json,true);结果就生成了一个关联数组:array(5) “a“ = int(1)“b“ = int(2)“c“ = int(3)“d“ = int(4)“e“ = int(5)五、json_decode的常见错误json$bad_json = “ ”bar”: ”baz” “;$bad_json = ” bar: “baz“ ”;$bad_json = ” “bar“: “baz“, ”;错。第一个的错误是,json 的分隔符delimiter只允许使用双引号,不能使用单引号。其次个的错误是,json 名值对的“名错误是,

11、最终一个值之后不能添加逗号trailingcomma。jsonobjec和数组json_decodenull。var_dump(json_decode(“Hello World“); /null六、参考材料PHP ManualEd Finkler, JSON is Everybody”s Friend完phpjsjsonphpjavascriptjson。jsonjsjsphpjsonphpjson_decodephpphp 也供给了 json_encode 函数来将数据转化成 json 格式。那么,jsjsonphpjson_encodejson 是否完全一样呢?今日,站长就和大家一起来探讨

12、这个问题。为例,先来看一下两者之间的区分。1、一维数组php$array=array(“1“,“2“,“3“);json复制代码 代码如下:“1“,“2“,“3“。细心的朋友很快就觉察,转化后得到的 json 字符串,就是javascriptjs来访问呢?js需要使用urlencode函数对其编码,如:代码如下:a href=“javascript:show(”)“ id=“aj“访问json复制代码 代码如下:function show(str)var jobj=eval_r(decodeURI(str);alert(jobj2);大家自己试一试就会觉察,是的,可以用 js 中访问一维数个字

13、符的值。上键名:php$array=array(”a”=”1”,”b”=”2”,”c”=”3”);使用 json_encode 函数转化后,对应的 json 字符串为“a“:“1“,“b“:“2“,“c“:“3“。变成了,那么这个字符串是否也可以按上面那样处理后被js访问呢?我们不防试一试:ahref=“javascript:show(”1”,”b”=”2”,”c”=”3”);?”)“ id=“aj“jsonechofunction show(str)var jobj=eval_r(decodeURI(str);alert(jobj.a);PHPjsoneval换成:复制代码 代码如下:fun

14、ction show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj.a);再试试吧!怎么样,可以访问了吧。这告知我们,在使用evaljson这里要留意,尽管 PHPjson“a“:“1“,“b“:“2“,“c“:“3“被传递给 js 后无法被直接解释为jsonjsjson复制代码 代码如下:var jobj=“a“:“1“,“b“:“2“,“c“:“3“;alert(jobj.b);2、二维数组直接给出例如代码:复制代码 代码如下:a href=“javascript:show(”)“jsonfunction show(str)v

15、ar jobj=eval_r(decodeURI(str);alert(jobj00);大家运行,会觉察,这跟一维数组差不多,这是不带键名的请看例如代码:复制代码 代码如下:ahref=“javascript:show(”1”,“b“=”2”,”3”id=“aj“访问jsonfunction show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj0.a);json点不一样。上面我们用的是alert(jobj00);而这里我们用的是alert(jobj0.a)json的访问方式。们对第一维添加键名,看看访问方式又有什么不同:复制代码

16、 代码如下:ahref=“javascript:show(”array(”1”,”2”,”3”);function show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj.k1);这里我们使用的是jobj.k1这样的方式,大家肯定已经觉察了,只要数组中jsonjson数组元素是数字索引,所以在jsonk1这样的方式来访问。复制代码 代码如下:a href=“javascript:show(”array(“a“=”1”,”2”,”3”);?”)“ id=“aj“访问jsonfunction show(str)var jobj=eval_r(”(”+decodeURI(str)+”)”);alert(jobj.k.a);正如上面所提到的,只要含有键名,就必需以json对象.键名的方式来访问,假设有多个键就要用json对象.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论