phpjson解析,问大佬php中如何用 foreach解析json
phpjson解析,问大佬php中如何用 foreach解析json详细介绍
本文目录一览: php 中序列化和json使用介绍
【序列化的概念】
序列化是将对象状态转换为可保持或可传输的格式的过程 与序列化相对的是反序列化 它将流转换为对象 这两个过程结合起来 可以轻松地存储和传输数据
将对象的状态信息转换为可以存储或传输的窗体的过程 在序列化期间 对象将其当前状态写入到临时或持久性存储区 以后 可以通过从存储区中读取或反序列化对象的状态 重新创建该对象
通常 对象实例的所有字段都会被序列化 这意味着数据会被表示为实例的序列化数据 这样 能够解释该格式的代码有可能能够确定这些数据的值 而不依 赖于该成员的可访问性 类似地 反序列化从序列化的表示形式中提取数据 并直接设置对象状态 这也与可访问性规则无关 对于任何可能包含重要的安全性数据的对象 如果可能 应该使该对象不可序列化 如果它必须为可序列化的 请尝试生成特定字段来保存不可序列化的重要数据 如果无法实现这一点 则应注意该数据会被公开给任何拥有序列化权限的代码 并确保不让任何恶意代码获得该权限
【JSON的概念】
JSON JavaScript Object Notation 一种更轻 更友好的用于接口(AJAX REST等)数据交换的格式 JSON是结构化数据串行化的文本格式 作为XML的一种替代品 用于表示客户端与服务器间数据交换有效负载的格式 它是从ECMAScript语言标准 衍生而来的 JSON的设计目标是使它成为小的 轻便的 文本的 而且是JavaScript的一个子集
【长度的比较】
如下一段代码 显示了对数组和对象编码后生成的字符串及其长度
复制代码 代码如下: class Foo { public $int = ; public $bool = TRUE; public $array = array(array( ) => test string );
public function test($flag) { echo $flag test function for Foo
; }
public static function output($str) { echo $str
; }
public static function pare_serialize_and_json($data) { $serialize_str = serialize($data); self::output( 序列化后的值: $serialize_str "; length=" strlen($serialize_str));
$json_str = json_encode($data); self::output( JSON后的值: $json_str "; length=" strlen($json_str)); }
}
$test_data = array( w => phppan => => ); //序列化数组
echo 数组
; Foo::pare_serialize_and_json($test_data);
$foo = new Foo(); echo 对象:
; Foo::pare_serialize_and_json($foo);
输出
复制代码 代码如下: 数组 序列化后的值:a: :{s: :"w";i: ;s: :"phppan";i: ;s: :"";i: ;}; length= JSON后的值:{"w": "phppan": "": }; length= 对象: 序列化后的值:O: :"Foo": :{s: :"int";i: ;s: :"bool";b: ;s: :"array";a: :{i: ; a: :{i: ;i: ;}i: ;s: :"test";i: ;s: :"string";}}; length= JSON后的值:{"int": "bool":true "array":{" ":[ ] " ":"test" " ":"string"}}; length= 很明显的长度区别 serialize在编码后大概是json的两倍
原因
?serialize后字符串包含了子串的长度 这可能是速度方面的优化 典型的空间换时间 但是它本身还是太重了 ?serialize有更加详细的类型区分 而json只有四种类型 并且是以简单的符号表示
【速度的比较】
以代码说明问题 如下比较速度的代码
复制代码 代码如下: $max_index = ; ini_set("memory_limit" " M"); $array = array_fill( rand( )); echo serialize
; $start = xdebug_time_index(); for ($i = ; $i < $max_index; $i++) { $str = serialize($array); } $end = xdebug_time_index(); echo $end $start
;
echo json
; $start = xdebug_time_index(); for ($i = ; $i < $max_index; $i++) { $str = json_encode($array); } $end = xdebug_time_index(); echo $end $start
; unset($array $str);
输出
复制代码 代码如下: serialize json serialize的速度在大数据量的情况下比json差了快一个数量级
从上面两点看 json不管是在速度还是在生成的字符串的大小上都比serialize要好 那为什么serialize还要存在呢? 原因在下面这个点 实现的功能
【处理对象】
如下代码
复制代码 代码如下: header("Content type:text/;charset=utf "); class Foo { public function test($flag) { echo $flag test function for Foo
; } } $foo = new Foo();
echo 反序列化测试
; $foo >test( ); $serialize_str = serialize($foo); $obj = unserialize($serialize_str); $obj >test( );
$foo >test( ); $json_str = json_encode($foo); $obj = json_decode($json_str); $obj >test( ); die();
输出
复制代码 代码如下: 反序列化测试 test function for Foo test function for Foo test function for Foo ( ! ) Fatal error: Call to undefined method stdClass::test()
json无法处理对象方法等数据
【使用范围】
lishixinzhi/Article/program/PHP/201311/20931
php获得api返回的json数据后,如何解析?
首先你需要使用对方约定方式获取,然后考虑是否使用缓存,最后获取到数据后使用json_decode函数解析成数组格式,接下来就是自己的逻辑代码了。
返回是json数据,就用 json_decode(api返回的数据,true),转变成数组就可以在php中操作了。
$res = "json数据";
$data = json_decode($res,true);
php解析不了JSON?
$keys = '{result:0,events:[{event:6}]}'; $string = json_decode($key...
答:json_decode( ) 可以实现对 JSON 格式的字符串进行编码 你的Json字符串有问题 结果:array(2) { ["result"] => int(0) ["events"] => array(1) { [0] => array(1) { ["event"] => int(6) } }}
问大佬php中如何用 foreach解析json
首先你要把JSON数据转成数组,因为在php中JSON就是一个字符串。
$jsonData = '{"list": [{ "goodsid": 4290, "post": [{ "param": "uin", "name": "账号" }, { "param": "goodsid", "name": "商品ID" }, { "param": "number", "name": "下单数量" }] }, ';// 你的JSON数据有点乱,我复制的可能不对 $aryData = json_decode($jsonData, true); // 转码为数组var_dump($aryData); // 打印 foreach ($aryData as $item) { var_dump($item); // 打印每个条目}
首先,不推荐使用foreach进行自己去解析json字符串,因为php已经封装了非常好用,且效率不低的内置方法,这个方法就是json_decode。
使用这个函数,可以直接把json数据转换成数据或者对象,这个是可以控制的。转换成对象或者数组之后,再使用foreach就可以方便遍历得到想要的数据。
json如何转php
json如何转php?json_decode是php5.2.0之后新增的一个PHP内置函数,其作用是对JSON格式的字符串进行编码.json_decode的语法规则:json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )json_decode接受一个JSON格式的字符串并且把它转换为PHP变量 ,当该参数$assoc为TRUE时,将返回array,否则返回object。JSON 格式的字符串$json = '{"a":"php","b":"mysql","c":3}';其中a为键,php为a的键值。实例:
程序输出:stdClass Object ([a] => php[b] => mysql[c] => 3 )Array ([a] => php[b] => mysql[c] => 3 )在上面代码的前提下访问对象类型$json_Class的a的值echo $json_Class->{'a'};程序输出:php访问数组类型$json_Array的a的值echo $json_Array['a'];程序输出:php
php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL
方法一:在你输出的时候就进行处理,在转为json之前对中文进行转码;
方法二:
$json = json_decode(trim($json,chr(239).chr(187).chr(191)),true);
方法三:
function prepareJSON($input){ if(substr($input,0,3) == pack("CCC",0xEF,0xBB,0xBF)) $input = substr($input,3); return $input;}
php json解析 出现问题 Notice: Trying to get property of non-object in。。。
访问类成员是可以用->,数组的话没有这种用法。
echo $sb->weatherinfo->city;
JS中可以通过->访问JSON对象。
------------------------------------
我用echo $sb['weatherinfo']['city'];可以正常输出结果,检查你的用法是否有问题。
echo $sb["weatherinfo"]["city_en"];
php里的$sb不是对象是数组吧。
php json解析 出现问题 Notice: Trying to get property of non-object in是设置错误造成的,解决方法为:
1、以快递100接口为例,返回的JSON数据。
2、建立函数。
3、PHP代码 转换成数组。
4、ecshop输出方式:php文件。
php解析json并输出到html页面
echo '
'; 这个时候$key已经不是对象了,所有不能用->.
可以这样:
<!--?php$content= file_get_contents('http://m.weather.com.cn/data/101010100.html');
$content = json_decode($content);
foreach ($content as $key ) {
echo '
';
echo '
';
echo '
';
echo '
';
}
或者直接
<!--?php$content= file_get_contents('http://m.weather.com.cn/data/101010100.html');
$content = json_decode($content);
echo '
';
echo '
';
echo '
';
echo '
';
用json_decode()将json字符串转化成php数组,然后直接循环数组取出值即可。
<!--?php$content= file_get_contents('获取json字符串的url');
$content = json_decode($content);//将json字符串转化成php数组
foreach ($content as $key ) {//循环数组
echo '
';
echo '
';
echo '
';
echo '
';
}
如何使用php解析json数组并显示?
json_decode
$jsonStr = '[{"text":"感觉Onedrive图片加载的速度特别慢","created":"Sat Nov 07 20:47:13 +0000 2015","favorite_count":0,"retweet_count":0,"url":"","media_url":""}]';$arr = json_decode($jsonStr, true);$text = $arr['text'];$created = $arr['created'];// 或者 $arr = json_decode($jsonStr);$text = $arr->text;$created = $arr->created;