[PHP]对Json字符串解码返回NULL的一般解决方案

/*--------------------------------------------------------------------------------------------------------

  @黑眼诗人 <www.chenwei.ws>

--------------------------------------------------------------------------------------------------------*/

php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array;若为false,返回object。如果返回NULL,说明报错,输出json_last_error(),得到的整数值对应错误提示。如图:

json_last_error()比较常见的是整数4, 是json字符串在json_decode之前已不完整,所以语法错误。

那么一定是客户端提交的个别字符影响了json的格式,可以使用JS进行过滤,可以解决一般问题,主要过滤回车,空格,html标签。

/** 过滤函数* @黑眼诗人 <www.chenwei.ws>*/
function htmlEncode(str) {
    str = str.replace(/\s+/ig, ‘‘);
    str = str.replace(/&/g, ‘‘);
    str = str.replace(/</g, ‘‘);
    str = str.replace(/>/g, ‘‘);
    str = str.replace(/(?:t| |v|r)*n/g, ‘<br />‘);
    str = str.replace(/t/g, ‘&nbsp; &nbsp; ‘);
    str = str.replace(/x22/g, ‘&quot;‘);
    str = str.replace(/x27/g, ‘'‘);
    str = str.replace(/"/g, "");
    return str;
}

以上情况针对的是,你必须提交json字符串数据到服务端处理,只能在客户端进行过滤。

其它的json_decode($str)返回NULL的一些原因:

1.$str只能UTF-8编码

2.元素最后不能有逗号(与php的array不同)

3.元素不能使用单引号

4.元素值中间不能有空格和\n,必须替换

如果遇到了此种情况,可以按照以上方式处理一遍。

时间: 2024-11-05 10:37:11

[PHP]对Json字符串解码返回NULL的一般解决方案的相关文章

如何解析json字符串及返回json数据到前端

前言:最近需要实现的任务是:写若干个接口,并且接口中的请求数据是json格式,然后按照请求参数读取前端提前整理好的json数据,并且将json数据返回到服务器端. 主要的工具:Gson  2.8.2 项目支撑:springboot maven 0.前导--了解一下基本的json语法 JSON是一种类似 XML的语言,是用了存储和交换文本信息的语法.它的全称为JavaScript Object Notation(JavaScript 对象表示法).与xml对比,它更小.更快,更易解析. 想要更好的

spring-data-jpa——如果使用了one-to-many,many-to-one的注解,在Jackson进行json字符串化时出现错误的解决方案

参考资料: http://blog.csdn.net/remote_roamer/article/details/51330843 http://blog.csdn.net/xiaodaiye/article/details/51118870 在spring-data-jpa中,使用了one-to-many和many-to-one注解,在进行json字符串化时出现错误. 经查阅资料找到以下解决方法: 通过在主表的pojo中增加@JsonManagedReference来注解关联字段: @OneT

关于对象转json字符串存在Date类型转换格式问题解决方案

JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor(){ @Override public Object processArrayValue(Object obj, JsonConfig jsonconfig) { return process(obj); } @Override public Object pr

PHP解码Json(json_decode)字符串返回NULL的原因及解决方法(转载)

本文主要为大家讲解了php在使用json_decode函数解码json字符串时,解码不成功返回NULL的问题原因分析和解决方法,感兴趣的同学参考下. 一般来说,php对json字符串解码使用json_decode()函数,第一个参数传字符串,第二个参数若为true,返回array:若为false,返回object.如果返回NULL,说明报错,输出json_last_error(),得到的整数值对应错误提示.如下图所示: json_last_error()比较常见的是整数4, 是json字符串在j

PHP 获取JSON json_decode返回NULL解决办法

在用json_decode对JSON格式的字符串进行解码时竟然为空,页面空白啊,整半天检查这里检查那里,问同事都没用. 今天必应搜索了下,问题解决了,原来是有BOM头输出,大虾的解决办法如下: 1).json_decode($json,boolean):$json为json格式的字符,第二个参数为TRUE时表示转换为数组,默认的FALSE表示 转换为对象. 2).json_decode要求的字符串比较严格: (1)使用UTF-8编码 (2)不能在最后元素有逗号 (3)不能使用单引号 (4)不能有

PHP json_decode返回null解析失败原因

在PHP5.4之前 json_decode函数有两个参数json_decode有两个参数,第一个是待解析的字符串,第二个是是否解析为Arrayjson_decode要求的字符串比较严格:(1)使用UTF-8编码(2)不能在最后元素有逗号(3)不能使用单引号(4)不能有r,t,如果有请替换所以问题来了,不小心在返回的json字符串中返回了BOM头的不可见字符,某些编辑器默认会加上BOM头,如下处理才能正确解析json数据: $result = json_decode(trim($contents,

对Json字符串进行格式化显示

很多时候,我们拿Json字符串作为返回结果,但是当数据量多的时候,一堆的Json字符串看起来很不直观,这时候我们可以使用以下办法将Json字符串格式化一下再输出 var JsonUti = { //定义换行符 n: "\n", //定义制表符 t: "\t", //转换String convertToString: function (obj) { return JsonUti.__writeObj(obj, 1); }, //写对象 __writeObj: fun

SpringMVC返回json字符串(非注解方式)

这里采用的是非注解形式,相当于注解中的@responseBody /**      * 根据字符串输出JSON,返回null      *       * @param jsonString      * @return      */     public String ajaxJson(HttpServletResponse response,String jsonString) {        return ajax(response,jsonString, "text/html&quo

将传入结构体 pMtInfo 中包含的数据内容转换成 JSON 字符串返回

upu_struct.h封装了有关  pMtInfo结构体的内容,用到的部分如下图所示: 利用jansson库实现将传入结构体 pMtInfo 中包含的数据内容转换成 JSON 字符串返回 代码如下: #include <stdio.h> #include <string.h> #include "jansson.h" #include "upu_struct.h" #include "upu_proto_parse.h"