导航:首页 > 编程语言 > phpjsondecode失败

phpjsondecode失败

发布时间:2024-06-16 14:35:16

php的json解析

注意json数据的格式。variety是嵌套在内部对象里的,直接访问当然获取不到。这里我建议你这样使用json_decode():

<?php
json_deocde($content,true);//第二个参数设为true时返回一个数组,而不是对象

解析的结果是:

$r=array(
'resultcode'=>'200',
'reason'=>'SUCCESSED!',
'result'=>
array(
0=>
array(
1=>
array(
'variety'=>'Ag(T+D)',
'latestpri'=>'4025.00',
'openpri'=>'3982.00',
'maxpri'=>'4048.00',
'minpri'=>'3961.00',
'limit'=>'1.95%',
'yespri'=>'3948.00',
'totalvol'=>'2703962.0000',
'time'=>'2013-08-0915:45:01',
),
//这里还有很多类似的结构,省略
),
),
)

获得第一个variety的方法是:

<?php
echo$r['result'][0][1]['variety'];

望采纳!

⑵ PHP取得JSON中的值

<?php
$a='{"from":"kor","to":"zh","trans_result":[{"src":".","dst":""}]}';

$tt=json_decode($a,true);
var_mp($tt);
echo"--------------- ";
echo$tt['trans_result'][0]['dst'];
?>

执行结果如下图

⑶ PHP json_decode(); 为什么没输出

我们知道网络api并不是百分百可靠,当遇到网络不稳定,接口出错等各种因素,并不一定返回标准的json数据,例如:

//如果从网络api抓取失败,返回的response为错误信息
$response='requesttimeout';
//json_decode之后返回NULL,你打印之后仍然没有输出,所以你采纳的那个答案仍然也帮不到你
print_r(json_decode($response,true));
//使用var_mp打印虽然可以看到NULL值,可是这并没有任何用处
var_mp(json_decode($response,true));

系统函数json_decode()在解析非json字符串返回NULL,解析乱码的json也返回NULL,你压根都不知道到底是哪里出了问题,因为NULL该返回值是不能通过print_r打印出来的,而官方php手册给了一些捕获异常信息的方法已经封装在下面的函数中了:

<?php
/**
*json解析接口,优化json_decode对数组的解析
*@paramstring$json_codejson字符串
*@returnmix错误信息或者数组
*/
function_json_decode($json_code)
{
$json_arr=json_decode($json_code,true);
switch(json_last_error()){
caseJSON_ERROR_NONE:
$error='';
break;
caseJSON_ERROR_DEPTH:
$error='-Maximumstackdepthexceeded';
break;
caseJSON_ERROR_STATE_MISMATCH:
$error='-Underfloworthemodesmismatch';
break;
caseJSON_ERROR_CTRL_CHAR:
$error='-';
break;
caseJSON_ERROR_SYNTAX:
$error='-Syntaxerror,malformedJSON';
break;
caseJSON_ERROR_UTF8:
$error='-MalformedUTF-8characters,possiblyincorrectlyencoded';
break;
default:
$error='-Unknownerror';
break;
}
if($error)
{
return$error.':'.$json_code;
}else{
return$json_arr;
}
}
header('Content-type:text/html;charset=utf-8');
$json='thisisnotajsoncode';
$arr=_json_decode($json);
if(is_array($arr))
{
//解析正确,逻辑代码部分
print_r($arr);
}else{
//请求超时,一般都会有异常处理机制,例如重新发起请求
if($result=='requesttimeout'){
//发起请求
}else{
//如果没有异常处理机制,抛出异常给上一层处理
thrownewException($result);
}
}

使用_json_decode的返回值如果是字符串,说明在解析json数据时遇到了错误,只要添加适当处理机制,可以大大提高代码的稳固性。

如果返回值是数组,这时便可以使用print_r打印出来。

⑷ PHP 璇诲彇涓崭简Json

鐢变簬js镄勬暟缁勬牸寮忓拰php镄勬暟缁勬牸寮忎笉涓镙峰緢闅鹃氲镓浠ユ湁浜 json 杩欐牱镄勭帺镒忓皹鍧
鐢╦son_decode()鍑芥暟灏呙SON 镙煎纺镄勫瓧绗︿覆缂栫爜銆
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_mp(json_decode($json));
var_mp(json_decode($json, true));
?>
浠ヤ笂渚嬬▼浼氲緭鍑猴细
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}[1]
杩樻湁涓猨son_encode
鐢╦son_encode()鍑芥暟瀵规暟缁勮繘琛孞SON缂栫爜銆
<?php
$arr = array ('a'=>1,'b'=>2,'浜╂āc'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>
浠ヤ笂渚嬬▼浼氲緭鍑猴细
{"a":1,"b":2,"c":3,"d":4,"e":5}[1]甯屾湜鑳藉府鍒颁綘锛屾垜杩桦湪钖庢淳钥愭愮浘缃戜笂璇惧︿範锻㈢幇鍦ㄦ病镞堕棿锛屾湁涓崭细镄勫彲浠ラ梾鎴戯纴涓璧风爷绌剁爷绌跺惂(๑•॒̀ ູ॒•́๑)鍟﹀暒鍟

⑸ php json_decode();解析出布尔值true是1,false为空,怎么解决

布尔值true和false的实际值就是1和空,true和false只不过是它们的名字(相当于常量)而已,不信你试试下面两行代码:
echo true; //显示为1
echo false; //显示为空
所以json中的true和false解析为1和空就是再正常不过的事,谁也没有吃它,因为这才是它们的真面目。
你可以在实际应用中直接把它们当作true和false来使用:
if ($j["flag"]) echo "flag的值是true";
如果你一定要显示为true和false才舒服,那可以在实际应用中转换一下即可:
echo $j["flag"]?"true":"false"; //注意,引号是必须的,否则结果仍然是1和空
当然,用 var_mp 和 var_export 可以打印出true和false,但这没法用于实际应用啊,只能用于程序调试。

⑹ 如何正确运用PHP json

从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。
1、json_encode()
该函数主要用来将数组和对象,转换为json格式。先看一个数组转换的例子:
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
上面代码的输出结果为:
{"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($obj);

以上代码的输出结果为:

复制代码代码如下:

{
"body":"another post",

"id":21,
"approved":true,
"favorite_count":1,
"status":null
}

由于json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。当中文使用GB2312编码,或者外文使用ISO-8859-1编码的时候,这一点要特别注意。

2、索引数组和关联数组
PHP支持两种数组,一种是只保存"值"(value)的索引数组(indexed array),另一种是保存"名值对"(name/value)的关联数组(associative array)。
由于javascript不支持关联数组,所以json_encode()只将索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。
比如,现在有一个索引数组:
$arr = Array('one', 'two', 'three');
echo json_encode($arr);
其输出结果为:
["one","two","three"]
如果将它改为关联数组:
$arr = Array('1'=>'one', '2'=>'two', '3'=>'three');
echo json_encode($arr);
结果就变了:
{"1":"one","2":"two","3":"three"}
注意,数据格式从"[]"(数组)变成了"{}"(对象)。
如果你需要将"索引数组"强制转化成"对象",可以这样写
json_encode( (object)$arr );
或者:
json_encode ( $arr, JSON_FORCE_OBJECT );
3、类(class)的转换
下面是一个PHP的类:

复制代码代码如下:

class Foo {

const ERROR_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($foo);
echo $foo_json;

输出结果是:
{"public_ex":"this is public"}

可以看到,除了公开变量(public),其他东西(常量、私有变量、方法等等)都遗失了。
4、json_decode()
该函数用于将json文本转换为相应的PHP数据结构。下面是一个例子:

复制代码代码如下:

$json = '{"foo": 12345}';
$obj = json_decode($json);
print $obj->{'foo'}; // 12345

通常情况下,json_decode()总是返回一个PHP对象,而不是数组。比如:
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_mp(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":4,"e":5}';
var_mp(json_decode($json),true);

结果就生成了一个关联数组:

复制代码代码如下:

array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}

5、json_decode()的常见错误
下面三种json写法都是错的,你能看出错在哪里吗?

复制代码代码如下:

$bad_json = "{ 'bar': 'baz' }";
$bad_json = '{ bar: "baz" }';
$bad_json = '{ "bar": "baz", }';

对这三个字符串执行json_decode()都将返回null,并且报错。

第一个的错误是,json的分隔符(delimiter)只允许使用双引号,不能使用单引号。第二个的错误是,json名值对的"名"(冒号左边的部分),任何情况下都必须使用双引号。第三个的错误是,最后一个值之后不能添加逗号(trailing comma)。
另外,json只能用来表示对象(object)和数组(array),如果对一个字符串或数值使用json_decode(),将会返回null。
var_mp(json_decode("Hello World")); //null

⑺ php提取json数组里面的值怎么提

先把获取的内容打印出来 ,看看是不是正常返回的数据

$filename="http://whois.pconline.com.cn/ipJson.jsp?json=true";
$content=file_get_contents($filename);

$json=@json_decode($content);
if($json){
$city=$json->city;
}else{
echo"json解析失败:".$content;
}

也可以根据你的框架功能,写成日志,方便出错时随时检查

另外 ,json_decode 可以接收一个参数来确定解析成对象还是数组

$content='{"ip":"120.239.177.231","pro":"广东省","proCode":"440000","city":"中山市","cityCode":"442000","region":"","regionCode":"0","addr":"广东省中山市移通","regionNames":"","err":""}';
$json=json_decode($content,true);
echo$json['city'];

参考文档:PHP json_decode

阅读全文

与phpjsondecode失败相关的资料

热点内容
数据结构和算法学习 浏览:732
印度电影《边境战争》 浏览:296
免费看的网站 浏览:610
接口上应用的命令 浏览:380
工藤瞳主要作品 浏览:606
51单片机安装 浏览:253
有发展前景编程语言 浏览:154
简约影视vip解析源码 浏览:217
上海app报价怎么投 浏览:612
封装最小的stc单片机 浏览:656
dos打开文件夹命令 浏览:598
唐水生伺候太太是什么电影 浏览:558
linuxshellcode 浏览:323
美国床戏电影 浏览:975
气体动力学pdf 浏览:984
午马免费电影全集国语版 浏览:663
linux最大权限 浏览:861
瞎子传奇在线看免费完整版电影 浏览:273
androidactivity跳转动画 浏览:847
javascript异步编程的4种方法 浏览:129