总结
豆包 AI 助手文章总结

php判断json格式是否正确的方法

小云云
发布: 2018-03-27 11:34:57
原创
4114人浏览过


本文主要和大家分享php判断json格式是否正确的方法,主要以代码的方式和大家分享,希望能帮助到大家。

1、校验json格式是否有误:

function data($value) {
    $res = json_decode($value, true);    
    $error = json_last_error();    
    if (!empty($error)) {        echo "<pre class="brush:php;toolbar:false">";
        print_r($value);        echo "
登录后复制
";     }    return $res; }

延伸:json_last_error可以判断返回 json 编码解码时最后发生的错误。 错误如下:有对应的数字编码,但是只要非空,就表示有错误,对于一般的json格式校验来说,已经足够了!
这里写图片描述

0 = JSON_ERROR_NONE No error has occurred1 = JSON_ERROR_DEPTH   The maximum stack depth has been exceeded2 = JSON_ERROR_STATE_MISMATCH   Invalid or malformed JSON3 = JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded4 = JSON_ERROR_SYNTAX Syntax error5 = JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded PHP 5.3.3

人性化的输出json错误!

<?php
     if (!function_exists('json_last_error_msg')) {         function json_last_error_msg() {
             static $ERRORS = array(
                 JSON_ERROR_NONE => 'No error',
                 JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
                 JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)',
                 JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
                 JSON_ERROR_SYNTAX => 'Syntax error',
                 JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded'
             );             $error = json_last_error();             return isset($ERRORS[$error]) ? $ERRORS[$error] : 'Unknown error';
         }
     }
登录后复制

2、带中文字的数组转json方法一(推荐)

加参数:JSON_UNESCAPED_UNICODE

$array = array('key' => 'value', 'test' => array('测试一下', 2, 3));echo "<pre class="brush:php;toolbar:false">";
print_r(json_encode($array, JSON_UNESCAPED_UNICODE));echo "
登录后复制
";exit;

这里写图片描述

3、另一种方法将带中文字的数组转json方法:

//将汉字,特殊字符原样变成json数据function ch_json_encode($data) {
    $ret = ch_urlencode($data);    $ret = json_encode($ret);    return '\'' . addslashes(urldecode($ret)) . '\'';
}//汉字,特殊字符变可读懂的字符串主程序function ch_urlencode($data) {
    if (is_array($data) || is_object($data)) {        foreach ($data as $k => $v) {            if (is_scalar($v)) {                if (is_array($data)) {                    $data[$k] = urlencode($v);
                } else if (is_object($data)) {                    $data->$k = urlencode($v);
                }
            } else if (is_array($data)) {                $data[$k] = ch_urlencode($v); // 递归调用该函数
            } else if (is_object($data)) {                $data->$k = ch_urlencode($v);
            }
        }
    }    return $data;
}
登录后复制

php5.2以后自带json_decode函数,但是对json文本串的格式要求非常严格。

很可能使用该函数得到的返回值是NULL,没有返回数组只有可能要么是编码问题,要么就是json返回的数据又特殊字符别无其他原因,下面是解决方法:

可以使用使用json_last_error()函数获取到的返回值来帮助我们判断出问题的原因。

立即学习PHP免费学习笔记(深入)”;

其中如果提示错误JSON_ERROR_SYNTAX(Syntax error),表示json串格式错误。

可以通过以下几个方式排错:

  1. json字符串必须以双引号包含

$output = str_replace("'", '"', $output);
登录后复制
  1. json字符串必须是utf8编码

$output = iconv('gbk', 'utf8', $output);
登录后复制

3.不能有多余的逗号 如:[1,2,],用正则替换掉

preg_replace('/,\s*([\]}])/m', '$1', $output)
登录后复制

4、不能有换行、制表符:这个非常坑,经常排除了所有的错误还是出不来,就是这个地方,多了个换行符啥的,尤其是在excel编辑之后再导入到数据库,然后再用php取出的时候!

$jsonstr = '

{"succ":true,"data":{"id":"31","keywords":"","description":"","jianjie":"       ","jianjie_short":"bb","nav":"ccc","deleted":"0","url":"http:\/\/travel.sina.com.cn\/beijing\/

"}}';//$ret=preg_replace("/\t/", " ", $ret);  

//$jsonstr = preg_replace("/\n/", ' ', $jsonstr);$jsonstr = str_replace("\n", ' ', $jsonstr);//print_r($jsonstr);exit;//$jsonstr = str_replace ('\n','', $jsonstr);$jd = json_decode($jsonstr,true);$errorinfo = json_last_error();//print_r(JSON_ERROR_DEPTH);

print_r($jd);
登录后复制

当对UTF-8编码的文件进行操作时,如果要把读取的内容当作文本内容来处理,最好先对BOM进行一些处理,这个问题在PHP6中得到了解决(可以设置文本/二进制读取模式),有兴趣的朋友可以自己查找PHP6的手册。

相关推荐:

PHP如何判断json格式是否正确

以上就是php判断json格式是否正确的方法的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号