php读取json时无数据(为空)的解决方法

在使用PHP调用一些json接口文件时 如果使用 file_get_contents 获取页面json数据后

再使用json_decode()解析后 数据无法正常输出 这是的返回值为null

这是由于php的file_get_contents得到的数据前面有三个看不到的BOM字符,将php转码或设置头部编码为无BOM依旧无法解决

一种可行的办法就是:

<?php$str = file_get_contents(‘json接口地址‘); //获取页面地址
$str = substr($str,3); //由于php问题file_get_contents得到的数据前面有三个看不到的BOM字符 使用substr函数提取第三个字符后的内容
$json = json_decode($str, true);//解析json代码 返回为 array 值
echo $json[‘motd‘];//以array 输出json中的 motd 数组

另外一种:

<?php
$str = file_get_contents(‘json接口地址‘); //获取页面地址
$json = json_decode(trim($str,chr(239).chr(187).chr(191)),true); //chr(239).chr(187).chr(191)在输出时 组成了utf8文件的bom头,之后用trim函数将其移除
print_r($json); //以array 输出json
时间: 2024-12-22 10:15:53

php读取json时无数据(为空)的解决方法的相关文章

MVC5序列化Json时遇到的大小写问题及解决方法

最近在一个MVC5项目中遇到了一个问题:C#编码规范中规定属性的首字母是大写的(大多数公司采用这种编码风格),但是从其它系统中接收到的json对象的属性却是小写的(大多数公司采用这种编码风格),怎样才能方便地完成转换? 最笨的方法是定义一个所有属性名为小写的ViewModel类,然后再编写相应的方法来完成大小写属性的转换. 有没有更加优雅的做法? 在MVC5,默认的json序列化组件是Newtonsoft.Json.怎样才能让Newtonsoft.Json在序列化的时候自动将大写转换成小写,而在

fastjson生成json时Null属性不显示的解决方法

举个例子 Map < String , Object > jsonMap = new HashMap< String , Object>(); jsonMap.put("a",1); jsonMap.put("b",""); jsonMap.put("c",null); jsonMap.put("d","wuzhuti.cn"); String str = JSO

universal image loader在listview/gridview中滚动时重复加载图片的问题及解决方法

在listview/gridview中使用UIL来display每个item的图片,当图片数量较多需要滑动滚动时会出现卡顿,而且加载过的图片再次上翻后依然会重复加载(显示设置好的加载中图片) 最近在使用UIL遇到了这个问题,相信这个问题许多使用UIL的人都碰到过 现在把解决方法贴出来给有同样问题的朋友做参考 先看下UIL的工作流程 在已经允许内存,存储卡缓存的前提下,当一个图片被请求display时,首先要判断图片是否缓存在内存中,如果false则尝试从存储卡读取,如果依然不存在最后才从网络地址

SpringMVC中出现&quot; 400 Bad Request &quot;错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

最近angularjs post到后台 400一头雾水 没有任何错误. 最后发现好文,感谢作者 SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法 今天开发过程中,在SpringMVC中的Action中处理前台ajax请求传过来的json数据直接转成对应的实体类时出错:400 Bad Request,后台也不报错,400指的的是请求无效(请求有语法问题或者不能满足请求),调试了好长时间

Oracle 11G R2 用exp无法导出空表解决方法

四.  Oracle 10g以后增加了expdp和impdp工具,用此工具也可以导出空的表 oracleexpdp/impdp 用法详解 1)  创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. createdirectory db_bak as 'd:\test\dump'; 2)  查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错) select * fromdba_directories; 3)  给s

配置View桌面时找不到域的解决方法

配置View桌面时找不到域的解决方法 概述:今天一个网友问我,在配置View桌面的时候,找不到域,这是在View Composer中没有配置帐户的原因. 网友2016/4/1213:50:15老老师请教个问题view我采用的是linkclone的模式父VM以加入域并做了快照但是在自定义的时候却找不到我的domain我看视频中是能直接找到domain的,我的会是哪里出了问题呢?我用的是view6.2王春海2016/4/1213:51:131.你的ViewComposer与View连接服务器的DNS

ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法

偶原来的用ASP.NET生成验证码图片时用的是JPG格式,今天想把它改成PNG格式的,结果就出现GDI+一般性错误,查了N久资料,才发现解决的办法,对分享此解决办法的网友深表感谢 Response.Clear();Response.ContentType = "image/PNG";img.Save(Response.OutputStream, ChartFormat.Png);竟然出现异常,是GDI+一般性错误.但是如果格式是Response.ContentType = "

Oracle 11gR2 用exp无法导出空表解决方法

Oracle 11gR2 用exp无法导出空表解决方法 在11gR2中有个新特性,当表无数据时,不分配segment以节省空间,Oracle 当然在执行export导出时,空表则无法导出,但是还是有解决办法的: 解决方法: 一.insert一行,再rollback就产生segment了. 该方法是在在空表中插入数据,再删除,则产生segment.导出时则可导出空表. 二.设置deferred_segment_creation参数 该参数值默认是TRUE,当改为FALSE时,无无是空表还是非空表,

ScrollView嵌套子View的getDrawingCache为空的解决方法

ScrollView嵌套子View的getDrawingCache为空的解决方法 问题 将组件的显示布局改为可以滚动的,然后用ScrollView作为了View的父类,发现View的getDrawingCache返回为null了,组件的滚动是必须要实现的,所以探究一下getDrawingCache为空的解决方法. 问题原因 查看日志可以发现 `02-01 14:21:33.512 3461-3461/com.example.sample.job W/View: View too large to