踩坑记录之:用fastJson转化错误expect ':' at 0, actual =

423 阅读2分钟

一,先贴结果:

本来要求对象value字段转化成这一段json,但实际转化却是:

不出意外的发生了

二,看了下代码的使用

这个地方有很大的问题,getvalue拿的是一个object,直接拿一个对象强转为字符串,如果这个对象本身是字符串还好,如果是一个对象呢?如果没有写toString方法呢??所以保险起见改成了

本地断点调试了一下

很遗憾没有复现这个问题

后面经过同事指点,map一定情况下会把key ,value按照=来拼凑成一个string.调试了一下发现真的是!!

三,被坑到的地方

转json字符串尽量都用方法转而不是直接加""

看了下hashmap的tostring方法发现是按照key value去自己拼凑的 破坏了json的格式!


更新:加了json.toJsonString后又报错了,原因是我这个value字段如果是个map转成json 符合业务,但是我这个value有时候是String 呀!!调用了 这个方法后,String也不报错,而是把”给我转义了!吐了,当时自测我只测了int类型没有错误,所以代码后面加了类型判断,如果这个value是map就给他用toJsonString

总结一下

  1. 如果setValue的地方是 (xxx+"")这样写,必须清楚xxx是基本类型或者基本类型的包装类型,如果是对象,map就会调用toString()方法,结果可能比你预想的偏差很大
  2. Json.toJsonString()方法转化的是把一个对象转化成字符串,(其中还有些参数设置后面慢慢研究一下),但这个对象是字符串的话,会给你把字符串的”转义出来存储,我觉得String类理应不应该作为这个方法的入参