记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

这篇具有很好参考价值的文章主要介绍了记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在项目里刚好有3个服务,同一个网关内层的3个服务,两个php的,一个golang的,为了提高负载以及进行分流,部分客户的接口调用会被网关自动分配到go服务。

恰好为了测试,我写了一个全量用户的生产、测试环境调用接口返回结果进行对比的脚本,于是发现了题中的问题:两个php服务里的接口返回值写入xlsx后,直接copy出来是正常的json串,golang的接口返回值copy出来变成双重引号如图

记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

 文章来源地址https://www.toymoban.com/news/detail-449226.html

排查过程:

1、先通过python的requests请求接口直接打印出返回值,看看是否是两个双引号,结果发现php跟go服务都是正常的json串。

 

2、继续排查,猜想问题会不会出现编码传输格式上,于是对比php跟go接口响应标头。

  php服务响应头如下:

  记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

  go服务应头如下

  记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

  go跟php响应头的差别只在于两点:php多了TimeStamp,Content-Type里面多了charset=utf-8。

  首先排除TimeStamp,从名称上就可以看出来不会对返回值格式或内容有任何影响;

  然后尝试用flask编写两个接口,Content-Type里面分别为application/json、application/json; charset=utf-8,写入excel后发现并没有任何不同。

 

3、响应头也没问题,继续猜想会不会是go服务代码缺陷,接口在return response之前并没有序列化,而是直接返回了object对象

  我们先了解一个概念:序列化与反序列化

  序列化是把程序对象转换为字节序列的过程,反序列化就是把字节序列恢复为程序对象的过程。

  因为不同的客户端、服务端可能使用的语言不同,为了兼容都是用序列化之后的数据进行传输,比如前端js将页面参数序列化之后传递给后端java服务。

  开始实验,本地flask直接返回字典{"username": username, "password": password},写入excel的居然真的出现了两个双引号。

  记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

 

4、于是让开发排查代码里是不是没有作序列化,但是出人意料的是,go代码里是做了序列化才返回的。

  所以上面的猜想都不成立,研究一度陷入僵局,直到...

 

5、偶然注意到copy出来的返回值尾巴上有个莫名其妙的换行。

  记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

  根据以前经常写json数据入csv、xlsx文件的经验,就算是格式化后加了多个引号的json数据(例如pandas的to_csv方法里的quoting参数即可控制是否加引号),也不可能加换行符。

  所以猜想会不会是返回值多了个隐形的换行符,然后在pacharm的cmd里调一下接口看看,果然go服务返回体尾巴上换行了,而php则不会

  记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题

 

6、于是在写入excel之前把返回值rstrip()一下做最后的确认,结果从excel复制出来的数据真的没有多重引号了

 

至此,揪出来这个go服务的bug!

 

到了这里,关于记一次排查:接口返回值写入excel后,从单元格copy出来的数据会带有多重引号的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 记一次kafka消息积压的排查

    kafka消息积压报警,首先进行了自查,这个现象频频出现,之前每次都是先重新分配分区或者回溯(消息可丢弃防止大量积压消费跟不上)。 根据手册首先排查下消息拉取是否正常,看到了消息拉取线程是waiting状态,然后看到kafka这块逻辑是消费线程阻塞了拉取线程。 对比了

    2024年03月24日
    浏览(54)
  • 记一次Nacos线程数飙升排查

    近日有个项目用到了Nacos做注册中心。运行一段时间发现Nacos服务的线程数达到了1k+。这肯定是不正常的。 环境: 镜像nacos-server 2.2.3 docker-compose编排部署 Nacos standalone模式 问题表现 docker stats nacos 发现该容器的线程数1k+ 用Fastthread分析stack文件表现如下 数量最多的线程线程栈如

    2024年02月09日
    浏览(46)
  • 记一次docker启动失败的问题排查

    以前在虚拟机上安装了一个docker,可以正常使用的,今天突然宿主机机器内存条坏了,换了内存条后启动机器,再使用 systemctrl start docker 启动docker,最后使用 docker start containID 启动报错 网上没有找到相应的描述,仔细分析看是 write /proc/sys/kernel/shmmni 报错了,错误原因是 in

    2024年02月14日
    浏览(64)
  • 【记一次线上事故的排查思路】- CPU飙升问题排查

    由于项目排期较紧,临时从其他组调来三个开发资源帮我一起做项目,难免上线的时候大家的需求一块上线。 问题来了,上线三天后,线上CPU总是莫名奇妙的突然飙升,飙升后CPU并未降下来,而是一直处在高点。 由于是线上导致的问题,CPU超限后,会自动重启项目,未能保

    2024年01月23日
    浏览(51)
  • 记一次Apache HTTP Client问题排查

    通过日志查看,存在两种异常情况。 第一种:开始的时候HTTP请求会报超时异常。 762663363 [2023-07-21 06:04:25] [executor-64] ERROR - com.xxl.CucmTool - CucmTool|sendRisPortSoap error,url:https://xxxxxx/realtimeservice/services/RisPort org.apache.http.conn.HttpHostConnectException: Connect to xxx [/xxx] failed: 连接超时 第二种

    2024年02月12日
    浏览(64)
  • 🔥🔥网络之谜:记一次失败排查的故事

    在这篇文章中,我们将详细探讨导致故障的可能原因以及解决方案,以便更好地理解故障排查的复杂性和艰巨性,尤其是当出现与本次故障表现相似的问题时。 首先,让我们回顾一下故障的表现。在客户端调用接口时,发现一直在转圈等待,而服务器端却收到了请求并在返回

    2024年02月05日
    浏览(56)
  • 记一次javaMetaspace导致CPU200%的排查

    insertMotionDataByWxCallBack方法并发多(其实也没多少,可能就3个?)就导致CPU200%了,本地没法复现。 看报错是:java.lang.OutOfMemoryError: Metaspace,刚开始的时候眼挫,忽略了后面的Metaspace,只看到了OutOfMemoryError,就各种找代码问题。 https://arthas.aliyun.com/doc/install-detail.html 然后发现

    2023年04月24日
    浏览(51)
  • 记一次Native memory leak排查过程

    路由计算服务是路由系统的核心服务,负责运单路由计划的计算以及实操与计划的匹配。在运维过程中,发现在长期不重启的情况下,有TP99缓慢爬坡的现象。此外,在每周例行调度的试算过程中,能明显看到内存的上涨。以下截图为这两个异常情况的监控。 TP99爬坡 内存爬坡

    2024年02月11日
    浏览(46)
  • 记一次Flink通过Kafka写入MySQL的过程

    一、前言 总体思路:source --transform --sink ,即从source获取相应的数据来源,然后进行数据转换,将数据从比较乱的格式,转换成我们需要的格式,转换处理后,然后进行sink功能,也就是将数据写入的相应的数据库DB中或者写入Hive的HDFS文件存储。 思路: pom部分放到最后面。 二

    2024年01月24日
    浏览(52)
  • 记一次jedis连接池顽固问题排查与修改

    这辈子不想再看到jedisBrokenPipe!!   测试环境运行16天后报错信息: 05:42:32.629 [http-nio-8093-exec-2] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - [log,175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is redis.clients.jedis.exceptions.JedisCon

    2023年04月21日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包