记录一次积木报表API数据集无法正常展示数据问题的排查全过程

目录

前言

过程

问题排查

调试

解决

结束语


前言

论如何深挖一个bug。结合代码食用更佳。

过程

这是一个报表。使用的是API数据集,URL带有两个参数。(由于保密因素在这里无法给大家更具体的展示)

一切准备就绪后。保存、预览。发现数据无法展示。

问题排查

第一步我先跟着官网的一些教程排查了一下API数据集的配置,但没有发现任何问题

第二步在确认API数据集配置无误后,我检查了一下提供数据的接口,但依旧无法找到问题

第三步到这一步已经黔驴技穷了,内心吐槽第一次使用API数据集怎么就直接翻车了,然后直到我闲着没事按F12的时候看到了积木报表的这个接口 

调试

 show接口提供用于渲染报表的数据。当下不就是我们API接口返回的数据它渲染不出来么?

所以直接本地调试!

在查看积木报表的日志中,发现了一个fastjson解析的报错。 

对于程序员来说最不喜欢的就是看到这种信息了。

 凭着实事求是的想法,我尝试的定位了一下这个报错的位置。

断点处抛出异常

 在此期间我尝试了无数次Download Sources想要下载一个比较完整的代码,但是无论我在哪种网络环境下都下载不了,点了没反应。也就只能卑微的根据反编译出来的源码一步步排查了。

可以看到,报错的这一行去解析了一下一个在代码中叫做“var10”的变量。 这个时候我们只要知道它到底解析了什么样的字符串而报错就可以继续排查下去了。

可问题来了,在这样的反编译环境下怎么知道这个“var10”是什么样的值呢?

反编译环境下无法找到var10这个属性

 此时,神圣的“alt+鼠标左键”再也不能为我找到那个属性的值。那这下子该怎么办呢?每当这个时候就需要请出我们神圣的“ctrl+鼠标左键”!定位这个“var10”的位置!

 映入眼帘的是一些对字符串的处理,第一眼就注意到了"data"、"links"、"total"、"count"这些字符串,我的脑海里积木报表官网的教程一闪而过:

 我记得containsKey这个方法是寻找一个Map中是否有对应的key。那么它应该就在寻找这些对应的键然后去做相应处理。

再来看一下var10值的情况,默认值为一个空的字符串,然后判断这个JSONObject有没有"links"这个key,如果有再做赋值处理,没有的话var10就只剩空字符串了。

 很显然,代码无情的跳过了唯一一个在var10被解析之前的赋值。也就是说解析var10其实只是在解析空字符串而已。

 那么。为什么JSONArray.parseObject()这个方法解析空字符串会抛异常呢?

实事求是,继续调试!把这一行代码单独拎出来放在单元测试里运行!

根据推测,var10应该是一个空字符串。所以直接让它解析空字符串

 怪了...不是解析空字符串会报错吗?为什么这一次就运行成功了呢?难道是我的推测有误吗?

带着灵魂三连问,左思右想。最后我注意到了一个细节:

 在做测试之前,我自己项目的fastjson是我刚刚加的,所以它是最新的版本!

而我公司项目的版本则是:

 高下立判!我的版本是最新一版,公司的是旧版,有可能是阿里已在高版本中修复了解析空字符串导致空指针报错的问题!

根据推测,我把我的依赖版本降为1.2.55。再次运行:

推测正确!与公司项目的报错如出一辙!

解决

现在虽然知道升级fastjson能够解决问题,而这一空指针问题早已在1.2.62版本中解决。但是我知道升级依赖可能会导致一些让人头大的问题,所以我决定尝试"锦上添花"!

在之前的推导过程中,我们知道,这次积木报表中的解析报错是因为var10的值是空字符串。而var10的值又是被一个叫"links"的属性所影响,那么假设我们在API数据集的接口中额外提供一个叫做"links"的空数组,让var10至少包含一些字符,会不会就能解决这个解析报错的问题呢?会不会就直接能够正常的让报表展示数据呢?

在接口上把它加上去 

运行然后检查API数据集的数据(仅做演示,所以这些属性暂时不会有任何值):

更新代码然后重新预览报表试试:

 成功了!有数据了!用这种方式能够在避免升级依赖的情况下解决这个问题!

结束语

呃...请问有没有人知道这个"links"属性是做什么的?这个积木报表我不太熟悉...(不太熟悉积木报表的官方文档)

还有,这个fastjson报错提示的"EOF"是什么意思?求各路大神指教!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
对于积木报表折线图配置,使用 API 接口获取动态数据展示在折线图上的步骤如下: 1. 确定数据接口:找到提供动态数据API 接口,确保能够从接口中获取到所需的数据。 2. 请求数据:使用适当的编程语言或工具,发送 HTTP 请求到 API 接口,获取数据的响应。根据需要,可以传递参数来指定时间范围、数据字段等。 3. 解析数据:解析 API 响应,提取所需的数据字段。根据 API 返回的数据格式(如 JSON),使用相应的方法进行解析。 4. 数据处理:对于折线图来说,通常需要将时间字段和数值字段分别提取出来,并进行必要的转换和处理。 5. 绘制折线图:使用适当的绘图库或工具,将处理后的数据绘制成折线图。根据绘图库的文档或示例代码,设置好横轴、纵轴以及折线的样式。 6. 更新数据:为了实现动态更新,可以设置定时任务或事件触发机制,在一定时间间隔或特定事件发生时,重新请求数据并更新折线图。 7. 错误处理:在请求数据和解析数据的过程中,需要考虑异常情况的处理,例如网络错误、API 响应错误或数据格式不匹配等情况。 8. 界面展示:将绘制好的折线图嵌入到积木报表的界面中,确保图表能够正确显示,并与其他组件协调一致。 9. 调整和优化:根据实际需求和用户反馈,对折线图的样式、交互和性能进行调整和优化,以提供更好的使用体验。 请注意,具体的实现方式和代码细节会因使用的编程语言、工具和积木报表平台而有所不同。您可以根据具体情况进行适当调整和参考相关文档或示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值