由于BOM头导致的Json解析出错

上周五改完一些BUG后,测试通过就安心在家过了个周末。结果周一回来一看,整个安卓APP所有的接口都挂掉了
1.查找bug
首先想到的是客户端代码有问题,然后想起来上周五还能运行得好好的手机也是同样的错误,看日志是JSON解析错误。

  

细看也没看出来什么问题来,后来把服务器返回的JSON串在BeJson上做校验也是未通过。

  

后来群里的朋友说让我把字符串转成16进制应该能看出问题来,转换后果然在第一个大括号的前边多了一个16进数,搜索发现那个16进制数是BOM头

  
2.解决bug
去掉json串中的BOM头,解析就没问题了。

时间: 2024-10-11 11:06:11

由于BOM头导致的Json解析出错的相关文章

JSON 解析出错问题

从 PHP 返回一段 JSON 数据给前台页面,但使用 eval 和 JSON.parse 解析都出错. 在网上那上在线的 json 解析工具解析都正确. 于是一段段删除测试,最终发现问题出在 \r\n 上面. 于是用php将它替换为 \\r\\n 还是出错.前台 \r\n 最终是要输出换行符的,于是干脆替换为 <br />问题解决.

ajaxfileupload 返回json解析出错 带有&lt;pre&gt;标签

首先公布解决办法: 将ajaxfileupload中uploadHttpData方法里 eval( "data = " + data ); 改为 data = jQuery.parseJSON(jQuery(data).text()); 即可! 另外由于jquery版本升级,老版本中的方法弃用导致方法不存在,在ajaxfileupload中添加上此方法即可 handleError: function( s, xhr, status, e ) { // If a local callba

JSON字符串带BOM头&quot;ufeff&quot;

调用三方接口返回值JSON字符串带BOM头"\ufeff",JSON解析死活报错. 我是用SpringBoot的RestTemplate调用三方接口的,一开始返回值我是用对象接收返回值,发现一直报错,我以为是RestTemplate的接收转换有问题,就将返回值换成了String类型去接收.接收到字符串后再转JSON.JSON字符串解析死活报错. 接口返回值日志如下: 2020-03-25 13:18:55.687 DEBUG 8595 --- [ main] o.s.web.clien

关于JSON解析的深坑之BOM头

    前言:在我们对Json字符串进行处理时,往往会碰到这个问题org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject,解析服务器返回的Json串时,JSONObject对象抛出了这个异常.其实这是返回的Json字符串含有BOM头导致的. 本人手拙,写的不好.望各位大虾见谅!!! 什么是JSON?  JSON(JavaScript Object Notation) 是一种轻

Android Json解析

JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文章简明清晰,尽量多列点,少废话.     参考文档:http://www.ietf.org/rfc/rfc4627.txt?number=4627 1.JSON解析     (1).解析Object之一: 1 {"url":"http://www.cnblogs.com/qian

Namespace declaration statement has to be the very first statement in the script-去除bom头

今天准备测试小程序的签名加密,但是刚引入官方的"加密数据解密算法"文件到项目里,然后为每个文件添加命名空间的时候,不管怎么加都报"Namespace declaration statement has to be the very first statement in the script" 苦恼了10分钟才发现原来是bom头导致的. BOM头是放在UTF-8编码的文件的头部的,占用三个字节(0xEF 0xBB 0xBF,即BOM),用来标识该文件属于UTF-8编码

关于接口返回BOM头处理的问题

今天用RestClient框架做接口请求.结果请求回来的json转模型失败.提示JSON格式不正确.到BeJson网站验证一下,发现果然不对. 后来得知是由于json信息带着bom头导致的,这个该死的东西肉眼看不到,导致我调试了老半天.后来干脆直接用原生byte[]做数据过滤吧.从网上找到方法: private string GetUTF8String(byte[] buffer) { if (buffer == null) return null; if (buffer.Length <= 3

perl6 JSON::Fast模块json解析的使用

关于JSON: JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,语法简单,各种语言都有相应的库或者模块支持. 因为JSON非常小巧,解析起来又非常简单,我经常会把配置文件组织成JSON格式. 关于JSON::Fast: 在http://modules.perl6.org/上的介绍:A naive, but hopefully fast json parser; drop-in replacement for JSON::Tiny 一个单纯的,快速的J

php批量检测并去除BOM头的代码

开发中会遇到BOM头, 导致程序无法执行. 浏览器返回接口如下图: 去除BOM头解决方法:<?phpini_set('memory_limit','1024M'); function checkdir($basedir) {        if ($dh = opendir ( $basedir )) {            while ( ($file = readdir ( $dh )) !== false ) {                if ($file != '.' &&a