Java8下如何构造可被Jackson解析为Map<String,Double>的合法JSON
原JSON语法错误说明
你提供的片段存在3个不符合RFC 8259 JSON规范的问题,直接校验会报错:
- 整个JSON对象缺失开头的左大括号
{,结构不完整 detail对象下的所有键名(比如LOAN_CAPITAL)没有用双引号包裹,JSON要求所有对象键必须是双引号包裹的字符串类型- 数值中使用逗号
,作为小数分隔符,JSON标准仅支持点号.作为小数分隔符,逗号在JSON中是值分隔符,会导致数值解析断裂
修正后的合法JSON
{ "reversedSellId": "reversed trxId from PayU", "merchant": "idMerchant", "detail": { "LOAN_CAPITAL": 1234.123, "LOAN_INTEREST": 1234.123, "LOAN_ADMON_FEE": 1234.123, "LOAN_IVA_ADMON_FEE": 1234.123, "LOAN_OVERDUE_INTEREST": 0, "LOAN_COLLECTION_MANAGEMENT": 0, "LOAN_IVA_COLLECTION_MANAGEMENT": 0 }, "currency": "COP" }
Jackson 转换说明
在Java 8环境下用Jackson转Map<String, Double>时注意:
- 直接提取
detail节点调用convertValue方法即可完成转换,基础数值类型Jackson默认可以自动映射为Double - 如果上游数据源无法修改,固定返回逗号分隔的小数格式,可以自定义JsonDeserializer,在解析逻辑中将数值字符串的逗号替换为点号后再转Double,避免解析失败
- 不要给数值类型的值加双引号,否则会被识别为字符串,转换时会抛出类型不匹配异常
内容的提问来源于stack exchange,提问作者Margarita
相关产品推荐
相关产品推荐

