首页 > 解决方案 > 将格式错误的 json 数组字符串转换为 Java 对象

问题描述

我有一个格式错误的 json 数组字符串,我从 API 调用中获得如下:

[{\"ResponseCode\":1,\"ResponseMsg\":\"[{\"Code\":\"CA2305181\",\"Message\":\"Processed successfully\"}]\"}]

Response Msg属性值中的方括号前有一个双引号。有没有办法将其转换为 Java 对象?

到目前为止我所尝试的:我使用杰克逊来解析它,但它给出了错误

ObjectMapper mapper = new ObjectMapper();
            mapper.setPropertyNamingStrategy(new ResponseNameStrategy());
            Response[] response = mapper.readValue(strOutput1, Response[].class);
Error: Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token

我也尝试过使用 Gson 来解析它,但它也给出了错误

Gson gson = new GsonBuilder()
                    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                    .create();
            Response[] response = gson.fromJson(strOutput1, Response[].class);
Error: Expected BEGIN_ARRAY but was STRING at line 1 column 35 path $[0].ResponseMsg

我已经浏览了 StackOverflow 上的以下链接,但没有一个解决了我的问题:

如何在 Java 对象中转换字符串数组 JSON

在 Java ME 中将 JSON 字符串转换为对象?

JSON 数组到 Java 对象

将json字符串转换为对象数组

将“格式错误”的 java json 对象转换为 javascript

标签: javajson

解决方案


我认为答案在评论中,您似乎试图在错误的地方解决问题。

您正在接收您希望解析为 java 对象的 json,不幸的是 json 格式错误,因此不会解析。

作为一般规则,您永远不应该尝试解决症状,而应该寻找根本原因并修复它,这听起来可能微不足道,但修复症状会导致混乱、不可预测和无法维护的系统。

所以答案是修复它被破坏的json。如果这是您控制的事情或您的控制,那么在您等待修复时,您可以在解析它之前放入一个 hack 来修复 json。

这样您就不会破坏您的解析,并且当第三方解决了问题时,只需删除一小部分字符串替换即可。但是不要使用 hack,它应该只在开发过程中使用。


推荐阅读