PHP json_decode 函数解析 json 结果为 NULL 的解决方法

在做网站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进行模块内容的编辑操作 ( 取出保存的数据 ) 时,需要用到 json_decode() 函数。

但是在解析的时候,使用 json_decode() 函数解析的结果一直是 NULL,没有出现希望解析成的数组。下面是问题和分析:

1. 当输出 json 字符串时,代码和页面的显示内容分别是:

echo $content = $res[0][‘con‘][‘content‘];

只需要考虑 $content , $res[0][‘con‘][‘content‘] 是从返回的数据中取出 content 的值,这里不需要考虑。这时页面显示:

{"bpic":"group1\/M00\/00\/0D\/rBAK31STtZeAe056AAKWuBmsAgc339.jpg","bname":"112","breason":"22","about1":"3334","about2":"444","about3":"555","tpic1":"group1\/M00\/00\/0D\/rBAK31STsyGARPwHAAMcD98U8xo736.jpg","tpic2":"group1\/M00\/00\/0D\/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg","tpic3":"group1\/M00\/00\/0D\/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg"}

稍微美化一下:

{"bpic":"group1\/M00\/00\/0D\/rBAK31STtZeAe056AAKWuBmsAgc339.jpg",
"bname":"112",
"breason":"22",
"about1":"3334",
"about2":"444",
"about3":"555",
"tpic1":"group1\/M00\/00\/0D\/rBAK31STsyGARPwHAAMcD98U8xo736.jpg",
"tpic2":"group1\/M00\/00\/0D\/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg",
"tpic3":"group1\/M00\/00\/0D\/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg"
}

2. 此时使用 json_decode() 解析 $content,并使用 var_dump 打印:

$content = json_decode($content,true);

但是页面却显示 NULL。此时使用 json_last_error() 函数打印一下错误,页面显示4,也就是语法错误。

echo $errorinfo = json_last_error();   //输出4 语法错误

解决方法:

出现这个问题是因为在 json 字符串中双引号被转义,只需要用 htmlspecialchars_decode() 函数处理一下 $content 即可:

$content = htmlspecialchars_decode($content);

此时再使用 json_decode() 函数解析,就没有问题了,页面输出:

Array (
[bpic] => group1/M00/00/0D/rBAK31STtZeAe056AAKWuBmsAgc339.jpg [bname] => 112
[breason] => 22
[about1] => 3334
[about2] => 444
[about3] => 555
[tpic1] => group1/M00/00/0D/rBAK31STsyGARPwHAAMcD98U8xo736.jpg [tpic2] => group1/M00/00/0D/rBAK31STtZeAEnEaAANwlbOXMYA393.jpg
[tpic3] => group1/M00/00/0D/rBAK31STtSqARRUMAAKWuBmsAgc150.jpg )
时间: 2024-11-19 04:29:18

PHP json_decode 函数解析 json 结果为 NULL 的解决方法的相关文章

Android Studio 解析json文件出现中文乱码解决方法

作为一个Android开发初学者,好不容易找到解决方法,跟大家分享一下, 其实很简单,只要保持服务器上的文件(date2.json)与软件的编码方式一样就行. 我用的Android Studio是utf-8,所以在服务器文件(date2.json)编码的方式也设值为utf-8; 新建一个文本文档,将写入内容,将文件另存为到服务器文件夹下的htdocs文件夹下,将.txt改为.json,编码方式为utf-8 直接保存就完成了 运行程序结果: //发送请求获取json文件 private void

使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法

把值类型的系统.布尔的失败是因为物化值是null.结果类型的泛型参数或查询必须使用可空类型. 解决方法: 请确保你查询中的字段值不为空或者做为空判断 使用Ef查询出现的问题The cast to value type 'System.Boolean' failed because the materialized value is null.的解决方法

eval函数解析json表达式

Eval函数解析 *********************** ps:JSON(JavaScript Object Notation,JavaScript对象表示法)是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量. json只支持三种的数据类型: 简单值,数组,字符串,布尔,或者null,但不支持undifine 基本的格式: 对象:键值 "name":"Yumay",|| "age": 18, ||"sex":&

Jquery.ajax报parseerror Invalid JSON错误的原因和解决方法:不能解析

(默认: 自动判断 (xml 或 html)) 请求失败时调用时间.参数有以下三个:XMLHttpRequest 对象.错误信息.(可选)捕获的错误对象.如果发生了错误,错误信息(第二个参数)除了得到 null 之外,还可能是 "timeout" , "error" , "notmodified" 和 "parsererror" . error事件返回的第一个参数XMLHttpRequest有一些有用的信息: XMLHttpR

孙鑫视频改变窗口过程函数中出现error C2440错误的解决方法

在Visual Studio 2010中,即使代码是完完全全按照孙鑫视频中的敲,也会在出现error C2440,这是因为开发平台由VC6.0升级至VS2010,需要将原有的项目迁移.VS2010对消息的检查更为严格,以前在VC6.0下完全正常运行的消息映射在VS2010下编译不通过. 百度了解决方法如下(亲测可用): 例如:TestDlg.cpp中ON_REGISTERED_MESSAGE(WM_INITDIALOG, &CTestDlg::OnInitDialog):第一:把原来的消息函数返

Type.GetType()在跨程序集反射时返回null的解决方法

在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型.如果使用稍有不慎,就会产生运行时错误.例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll获取程序集B.dll中的类型,就会返回Null. 关于跨程序集的反射,有两点需要注意: 1.如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行.可以说,typeof是支持强类型的.比如 1 Type supType = typeof(BNameSpace

使用javascript的eval函数解析json字符串,提示“not avalible”怎么办?

按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对": var jsonString = '{ "firstName": "Brett" } '; 如果这样的简单json字符串使用eval函数是不能解析(在chrome浏览器37.0中测试)的 var a = eval(jsonString); 执行这个语句是系统会提示:“not avalible”; 这样的问题怎么办呢,我们实际中确实需要传输多个参数的值. 解决的办法是将最简单的

eval函数解析json数据时加上圆括号

如果最外层是一个{}的话,需要再增加一对圆括号, 不加圆括号会报:错误Uncaught SyntaxError: Unexpected token : 其它类似: 在函数中返回箭头函数对象时,也要加一个()比如 export default connect(()=>({"age":111}))(Demo); 主要原因是,不加圆括号,会解释为语句块. 原文地址:https://www.cnblogs.com/zhaogaojian/p/12332465.html

关于json_decode乱码及NULL的解决方法

写接口的同学应该会经常遇到数据格式的转换,这时候必不可少的两个函数就是json_encode()和json_decode(). 这两个函数使用的时候有很多的主要事项,在这里我来说一下json_decode(). json_decode(): 对JSON 格式的字符串进行解码,接受一个JSON 格式的字符串并且把它转换为 PHP 变量. (1)将数据转换成数组之后,打印会显示NUll: 原因之一json_decode只支持utf-8. iconv('gbk','utf-8', $result_st