yzc567亚洲城:PHP应用JSON技巧讲解_php技巧_脚本之家,JSON在PHP中的应用介绍_php技巧_脚本之家

从5.2本子伊始,PHP原生提供json_encode函数,后边叁个用于编码,前面一个用于解码。
一、json_encode()
该函数主要用来将数组和对象,转变为json格式。先看一个数组调换的例证:
$arr = array (‘a’=>1,’b’=>2,’c’=>3,’d’=>4,’e’=>5); echo
json_encode; 结果为 {“a”:1,”b”:2,”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; 结果为 复制代码 代码如下: { “body”:”another post”,
“id”:21, “approved”:true, “favorite_count”:1, “status”:null }
由于json只选择utf-8编码的字符,所以json_encode()的参数必得是utf-8编码,不然会获得空字符大概null。个中文使用GB2312编码,或许外文使用ISO-8859-1编码的时候,那一点要特别注意。
二、索引数组和关周全组
PHP扶植二种数组,黄金年代种是只保留”值”的索引数组,另生机勃勃种是保存”名值对”的涉及数组。
由于javascript不援救关联数组,所以json_encode()只将索引数组转为数组格式,而将波及数组转为对象格式。
比方,现在有一个索引数组 复制代码
代码如下: $arr = Array(‘one’, ‘two’, ‘three’); echo json_encode;
结果为: [“one”,”two”,”three”] 假使将它改为涉嫌数组: $arr =
Array(‘1′=>’one’, ‘2′=>’two’, ‘3′=>’three’); echo json_encode;
结果就变了: {“1″:”one”,”2″:”two”,”3″:”three”} 注意,数据格式从”[]”。
借使您须求将”索引数组”强制转变成”对象”,能够这么写 json_encode; 或者
json_encode ( $arr, JSON_FORCE_yzc567亚洲城:PHP应用JSON技巧讲解_php技巧_脚本之家,JSON在PHP中的应用介绍_php技巧_脚本之家。OBJECT ); 三、类的转移
上边是三个PHP的类: 复制代码 代码如下:
class Foo { const E帕杰罗ROEscort_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; } }
以往,对那一个类的实例举办json调换: 复制代码 代码如下: $foo = new Foo; $foo_json =
json_encode; echo $foo_json; 输出结果是 {“public_ex”:”this is
public”} 可以看见,除了公开变量,其余东西都屏弃了。
四、json_decode()
该函数用于将json文本转变为相应的PHP数据结构。上面是一个事例: 复制代码 代码如下: $json = ‘{“foo”: 12345}’;
$obj = json_decode; print $obj->{‘foo’}; // 12345
通常情状下,json_decode()总是回到多个PHP对象,实际不是数组。比方: $json
= ‘{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}’; var_dump;
结果就是生成多少个PHP对象: 复制代码
代码如下: object { [“a”] => int [“c”] => int [“e”] => int
} 假使想要强制生成PHP关联数组,json_decode()须求加贰个参数true: $json
= ‘{“a”:1,”b”:2,”c”:3,”d”:4,”e”:5}’; var_dump,true);
结果就生成了叁个提到数组: 复制代码
代码如下: array [“b”] => int [“d”] => int }
五、json_decode()的广泛错误
下边二种json写法都以错的,你能看出错在哪儿呢? 复制代码 代码如下: $bad_json = “{ ‘bar’: ‘baz’
}”; $bad_json = ‘{ bar: “baz” }’; $bad_json = ‘{ “bar”: “baz”, }’;
对那八个字符串施行json_decode()都将再次来到null,而且报错。
第叁个的荒诞是,json的相间符只允许利用双引号,无法运用单引号。第二个的谬误是,json名值对的”名”,任何情状下都不得不运用双引号。第多少个的大错特错是,最后二个值之后不能增添逗号。
其它,json只可以用来表示对象,如若对贰个字符串或数值使用json_decode(),将会回到null。
var_dump(json_decode; //null

JSON 基础

php json_decode重返数据js的管理 php
json_decode后,重返到前台的多少如:encode_str
=》{“green”:10,”size”:5,”strock”:12} 则js通过 eval(“obj = ” +
encode_str + “;”) ; 便可将json数据实例化为目的,
直接obj.green就可以获得数码。Javascript
中得以用{}表示多少个对象,用[]意味着一个数组,如:

简 单地说,JSON 能够将 JavaScript
对象中意味的风流洒脱组数据调换为字符串,然后就足以在函数之间轻易地传递那个字符串,或然在异步应用程序中将字符串从
Web 顾客机传递给劳务器端程序。那一个字符串看起来有些奇怪,不过JavaScript 非常轻松解释它,况且 JSON
能够代表比名称/值对更眼花缭乱的协会。比如,能够表示数组和复杂的目的,而不仅是键和值的简便列表。

var
obj={“a”:”v”,”b”:”x”};//这象征变量obj是三个对象,它有两日性格:a和b,属性值分别是:v和x.var
arr=[“v”,”x”];//那意味着变量arr是一个数组,它有两一成分,索引分别是0和1,值分别是:v和x.JSON其实就是这三种格式混合在合作来代表数据的逻辑结构的格式,其实JSON就是Javascript中目的和数组的混合体

简单 JSON 示例

PHP提供的专门的函数来扭转和剖析JSON格式的多少,PHP解析出来的多寡根原先Javascript的多寡的意思同样,即Javascript对象拆解剖判成PHP对象,Javascript数组剖析成PHP数组,PHP应用JSON的函数是:json_encode;PHP拆解深入分析JSON的函数是:json_decode;

依据最简易的格局,能够用上面那样的 JSON 表示名称/值对:

因而JSON的样式有二种,不一致的方式在PHP解释出来后的花样也是例外的。复制代码
代码如下://形式1:完全部都以指标的款式,这种样式的数目在Javascript中又叫相关数组,与平日数组分化的是,它能够因而字符串作索引来访谈$json='{“item1”:{“item11”:{“n”:”chenling”,”m”:”llll”},”sex”:”男”,”age”:”25″},”item2″:{“item21″:”ling”,”sex”:”女”,”age”:”24″}}’;
$J=json_decode; 将出口:复制代码
代码如下:stdClass Object ( [item1] => stdClass Object ( [item11]
=> stdClass Object ( [n] => chenling [m] => llll ) [sex]
=> 男 [age] => 25 ) [item2] => stdClass Object ( [item21]
=> ling [sex] => 女 [age] => 24 )
)举个例子说小编要拿走了值是chenling的特别属性,则应该这么访谈:$J->item1->item11->n;//那将得到属性n的值:chenling其实这种访谈方式跟访谈普通的对象属性大约,也相当于访谈二个3维数组。复制代码 代码如下://方式2:对象和数组混合
$json='{“item1”:[{“name”:[{“chen”:”chenling”,”ling”:”chenli”}],”sex”:”男”,”age”:”25″},{“name”:”sun”,”sex”:”女”,”age”:”24″}]}’;
$J=json_decode; 将输出: stdClass Object ( [item1] => Array (
[0] => stdClass Object ( [name] => Array ( [0] =>
stdClass Object ( [chen] => chenling [ling] => chenli ) )
[sex] => 男 [age] => 25 ) [1] => stdClass Object (
[name] => sun [sex] => 女 [age] => 24 ) ) )
举个例子说笔者要获得了值是chenling的可怜成分,则应该这么访问:$J->item1[0]->name[0]->chen;//那将获得成分chen的值:chenling其实这种PHP应用JSON情势组成了对象和数组的走访方式,也也正是访问一个5维数组。复制代码 代码如下://方式3:完全部组形式$json='[[“item1″,”item11”],[“n”,”chenling”],[“m”,”llll”]]’;
$J=json_decode; 将输出: Array ( [0] => Array ( [0] => item1
[1] => item11 ) [1] => Array ( [0] => n [1] =>
chenling ) [2] => Array ( [0] => m [1] => llll ) )
举个例子说笔者要拿到了值是chenling的不得了成分,则应该这么访问:

{ "firstName": "Brett" }

$J[0][1];//那将得到成分值chenling的十二分成分

那几个示例非常基本,并且事实上比同等的纯文本名称/值对据有越多的空中:

而是用这种方法有贰个劣势,正是心有余而力不足用字符串作为目录,只好用数字,用完全对象的花样得以解决那几个难点,其实这种访谈方式便是数组的拜望情势,约等于访谈三个2维数组。

firstName=Brett

PHP应用JSON小结:

只是,当将多个名称/值对串在一块儿时,JSON
就能够反映出它的股票总市值了。首先,能够成立包含多个名称/值没有错记录,比如:

从地点的PHP应用JSON例子能够看出JSON有一点点近似XML,也足以在PHP和Javascript之间传递带结构的多少,使用起来很有利。需求专一的是每一种属性和属性值都由引号””包涵起来。

{ "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }

从语法方面来看,这与名称/值相比较并未异常的大的优势,然而在这里种情状下 JSON
更易于选拔,並且可读性更加好。举个例子,它显明地球表面示以上八个值都是平等记录的后生可畏有的;花括号使那些值有了某种关系。

值的数组

当 需求代表生龙活虎组值时,JSON
不但能够提升可读性,何况能够减小复杂性。举个例子,倘若您希望代表壹位名列表。在
XML
中,需求广大起始标志和告竣标识;假使运用规范的称呼/值对(就疑似在本类别后边小说中看看的这种名称/值对卡塔尔国,那么必需建构黄金时代种专有的数量格式,大概将键
名称更改为 person1-firstName 那样的样式。

万风度翩翩采纳 JSON,就只需将八个带花括号的记录分组在一起:

{ "people": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }]}

那轻易理解。在此个示例中,唯有一个名称叫 people
的变量,值是包括多少个条指标数组,每一个条约是一人的记录,当中蕴藏名、姓和电子邮件地址。上边包车型客车事必躬亲演示怎样用括号将记录组合成贰个值。当然,能够选取同风流罗曼蒂克的语法表示八个值:

{ "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ],"authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ],"musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ]}

此处最值得注意的是,能够代表多个值,每个值进而饱含多少个值。可是还应该静心,在不一致的主条款(programmers、authors
和 musicians卡塔尔之间,记录中其实的称呼/值对能够不平等。JSON
是一心动态的,允许在 JSON 结构的高级中学级改变表示数据的不二秘技。

在拍卖 JSON
格式的数据时,没有索要遵从的预约义的束缚。所以,在同样的数据结构中,可以转移表示数据的议程,以至足以以不一样方法意味着相符事物。

在 JavaScript 中使用 JSON

左右了 JSON 格式之后,在 JavaScript 中接收它就很简短了。JSON 是
JavaScript 原生格式,那表示在 JavaScript 中管理 JSON
数据不须求任何特殊的 API 或工具包。

将 JSON 数据赋值给变量

比方,能够创立二个新的 JavaScript 变量,然后将 JSON
格式的多寡字符串间接赋值给它:

var people = { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" }, { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ] }

那特简单;今后 people 包涵前面看见的 JSON
格式的多寡。不过,那还非常不足,因为访谈数据的形式就如还不明显。

拜望数据

尽 管看起来不生硬,可是上面的长字符串实际上只是二个数组;将以此数组放进
JavaScript
变量之后,就可以相当的轻便地拜会它。实际上,只需用点号表示法来代表数组成分。所以,要想采访programmers 列表的率先个条指标姓氏,只需在 JavaScript
中采纳下边那样的代码:

people.programmers[0].lastName;

留神,数组索引是从零从头的。所以,那行代码首先拜会 people
变量中的数据;然后移动到称为 programmers
的规规矩矩,再移动到第三个记录;最终,访谈 lastName 键的值。结果是字符串值
“McLaughlin”。

上面是采纳雷同变量的多少个示范。

发表评论

电子邮件地址不会被公开。 必填项已用*标注