导航:首页 > 编程语言 > php解析jsonnull

php解析jsonnull

发布时间:2022-08-29 07:37:21

php获取服务器端数据得到json后转换数组始终为null是怎么回事

你可以将你获取到的json数据贴上来看看.出现null绝大多数是因为格式有误引起的。
但是有时候也会由于编码原因(比如,远程获取其它链接地址的json数据)

② php 解析json 字符串,真的没人会吗求大神解答


$a=['2'=>2,'3'=>3,'4'=>json_encode(['5'=>'5','6'=>'6'])];
$b=['a'=>json_encode($a),'b'=>['a'=>'b']];
$json_code=json_encode($b);

echo$json_code;
echo" ";
$json_str='{"a":"{"2":2,"3":3,"4":"{\"5\":\"5\",\"6\":\"6\"}"}","b":{"a":"b"}}';

//这两个并不相等
var_mp($json_code);
var_mp($json_str);

echo" ";
//这样才相等
$json_str='{"a":"{"2":2,"3":3,"4":"{\"5\":\"5\",\"6\":\"6\"}"}","b":{"a":"b"}}';
$json_str=str_replace("\\","\\\",$json_str);


echo" ";
echo$json_str;
echo" ";

$arr=json_decode($json_str,true);
print_r($arr);

③ php怎么解析utf-8带BOM编码的json数据,php解析json数据返回NULL

方法一:在你输出的时候就进行处理,在转为json之前对中文进行转码;

方法二:

$json=json_decode(trim($json,chr(239).chr(187).chr(191)),true);


方法三:

functionprepareJSON($input){
if(substr($input,0,3)==pack("CCC",0xEF,0xBB,0xBF))$input=substr($input,3);
return$input;
}

④ 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

目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。
从5.2版本开始,PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码。
一、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}

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

二、索引数组和关联数组
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"]

三、类(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),其他东西(常量、私有变量、方法等等)都遗失了。

⑥ php json 中文null怎么处理啊

Json 只支持 utf-8 编码

<?php
/**************************************************************
*
* 使用特定function对数组中所有元素做处理
* @param string &$array 要处理的字符串
* @param string $function 要执行的函数
* @return boolean $apply_to_keys_also 是否也应用到key上
* @access public
*
*************************************************************/
function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
{
static $recursive_counter = 0;
if (++$recursive_counter > 1000) {
die('possible deep recursion attack');
}
foreach ($array as $key => $value) {
if (is_array($value)) {
arrayRecursive($array[$key], $function, $apply_to_keys_also);
} else {
$array[$key] = $function($value);
}

if ($apply_to_keys_also && is_string($key)) {
$new_key = $function($key);
if ($new_key != $key) {
$array[$new_key] = $array[$key];
unset($array[$key]);
}
}
}
$recursive_counter--;
}

/**************************************************************
*
* 将数组转换为JSON字符串(兼容中文)
* @param array $array 要转换的数组
* @return string 转换得到的json字符串
* @access public
*
*************************************************************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}

$array = array
(
'Name'=>'希亚',
'Age'=>20
);

echo JSON($array);
?>

⑦ PHP怎么解析这段json代码,并且要循环输出来

$str=json_decode('你的json');
var_mp($str->info->item[0]);//取出第一个item

⑧ php解析不了JSON

⑨ php json_decode 为什么我远程获取的json数据用json_decode无法解析返回null同样的字符串如果我固定在

首先要确认的是“远程获取的json数据”是不是真的获取到了?
如果获取到了,不能decode那就比较奇怪了。把错误信息贴出来。

⑩ 问大佬php中如何用 foreach解析json

首先,不推荐使用foreach进行自己去解析json字符串,因为php已经封装了非常好用,且效率不低的内置方法,这个方法就是json_decode。
使用这个函数,可以直接把json数据转换成数据或者对象,这个是可以控制的。转换成对象或者数组之后,再使用foreach就可以方便遍历得到想要的数据。

阅读全文

与php解析jsonnull相关的资料

热点内容
gif有损压缩 浏览:929
windows下安装linux命令操作 浏览:840
米家app怎么设置进门亮灯 浏览:650
任我行服务器为什么会影响截图 浏览:294
安卓留言板怎么删除 浏览:16
做大厂程序员有什么感受 浏览:239
php文件只读 浏览:773
红色警戒3命令修改器112 浏览:431
安卓税收和苹果税是什么意思 浏览:444
快速排序算法的时间复杂度分析 浏览:111
大龄程序员困境 浏览:269
手机号忘了怎么登录农行app 浏览:571
商品信息管理系统php 浏览:8
效果器app怎么无线连接 浏览:404
clinux线程锁 浏览:851
怎么看新手机安卓充电器是不是原装 浏览:294
32单片机f4点灯源码 浏览:223
车载安卓导航开发者选项怎么开启 浏览:694
学生程序员兼职 浏览:360
androidswitch事件 浏览:998