有关json_decode乱码及NULL的问题


Posted in Javascript onOctober 13, 2015

具体内容请看下文吧。

写接口的同学应该会经常遇到数据格式的转换,这时候必不可少的两个函数就是json_encode()和json_decode()。

这两个函数使用的时候有很多的主要事项,在这里我来说一下json_decode()。

json_decode(): 对JSON 格式的字符串进行解码,接受一个JSON 格式的字符串并且把它转换为 PHP 变量。

(1)将数据转换成数组之后,打印会显示NUll:

原因之一json_decode只支持utf-8.

iconv('gbk','utf-8', $result_string);用iconv函数将写入数据的gbk编码格式转换为要输出的utf-8编码格式,若原本的数据是utf-8格式,则不用此步骤,否则还会出现乱码

原因之二:json字符串必须以双引号包含

str_replace("'", '"', $result_string);//将json数据中的单引替换成双引

原因之三:不能有多余的逗号 如:[1,2,]

用正则替换掉,preg_replace('/,\s*([\]}])/m', '$1', $result_string);

(2)将数据转换成数组或者在转换成json格式数据之后,会显示乱码:

这时候要用到urlencode()和urldecode()

以下是我的代码,经试验有效

if(file_exists($result['save_path'])){
  $contents=file_get_contents($result['save_path']);//将一个文件的内容写入,文件是utf-8格式,里面是json格式的数据
  //$getcontent = iconv("gbk", "utf-8//ignore",$contents);//若文件原本是utf-8格式,无需转换
  $getcontent=str_replace("'", '"',$contents);//将单引替换成双引
  preg_replace('/,\s*([\]}])/m', '$1', $getcontent);//去掉多余的逗号
  $new_array=array();
  $new_array=json_decode($getcontent,true);
  $res=array();
  foreach ($new_array as $key=>$val){
   foreach ($new_array[$key]['items'] as $k=>$v){
    if($k<$row){
     $res[$k]['position']=$v['position'];
     $res[$k]['distance']=$v['distance'];
     $res[$k]['title']=urlencode($v['title']);
     $res[$k['vicinity']=urlencode($v['vicinity']);
    }
   }
  }
 if($res){
 $new_res['items']=$res;
 }else{
 $new_res['items']="";
 }
 echo urldecode(json_encode($new_res));
}

以上内容是小编给大家分享的有关json_decode乱码及NULL的问题,希望对大家有所帮助。

Javascript 相关文章推荐
重构Javascript代码示例(重构前后对比)
Jan 23 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
Feb 23 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
深入理解ES6中let和闭包
Feb 22 Javascript
angular 实时监听input框value值的变化触发函数方法
Aug 31 Javascript
浅谈Vue数据响应思路之数组
Nov 06 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
Oct 30 Javascript
javascript实现弹幕墙效果
Nov 28 Javascript
vue调用本地摄像头实现拍照功能
Aug 14 Javascript
vue中watch和computed的区别与使用方法
Aug 23 Javascript
Nuxt pages下不同的页面对应layout下的页面布局操作
Nov 05 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 #Javascript
JS实现自动定时切换的简洁网页选项卡效果
Oct 13 #Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
Oct 13 #Javascript
JS实现的简洁二级导航菜单雏形效果
Oct 13 #Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 #Javascript
js验证真实姓名与身份证号是否匹配
Oct 13 #Javascript
编写高性能Javascript代码的N条建议
Oct 12 #Javascript
You might like
基于mysql的bbs设计(三)
2006/10/09 PHP
PHP iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
JS删除字符串中重复字符方法
2014/03/09 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
2014/10/29 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
Webpack 服务器端代码打包的示例代码
2017/09/19 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
Numpy数组转置的两种实现方法
2018/04/17 Python
Python3实现汉语转换为汉语拼音
2019/07/08 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
Python基于Twilio及腾讯云实现国际国内短信接口
2020/06/18 Python
python 调用Google翻译接口的方法
2020/12/09 Python
python中time.ctime()实例用法
2021/02/03 Python
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
Europcar西班牙:全球汽车租赁领域的领导者
2018/09/17 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
医德医风自我评价
2014/09/19 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
2019年12月24日平安夜祝福语集锦
2019/12/24 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang
nginx.conf配置文件结构小结
2022/04/08 Servers
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL
SQL Server数据库备份和恢复数据库的全过程
2022/06/14 SQL Server