【发布时间】:2018-11-04 11:31:46
【问题描述】:
我有一个格式错误的 json 数组字符串,我从 API 调用中获得如下:
[{\"ResponseCode\":1,\"ResponseMsg\":\"[{\"Code\":\"CA2305181\",\"Message\":\"Processed successfully\"}]\"}]
Response Msg 属性值中的方括号前有一个双引号。
有没有办法把它转换成 Java 对象?
到目前为止我已经尝试过: 我已经使用 Jackson 来解析它,但它给出了错误
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 上的以下链接,但没有一个解决了我的问题:
How to Convert String Array JSON in a Java Object
Convert a JSON string to object in Java ME?
【问题讨论】:
-
我认为是时候回到那个 API 并弄清楚它为什么会发送损坏的 JSON。如果这是他们的错,那么没有人可以使用他们的服务。另一种选择是您可能在收到数据时对数据进行了处理。也许告诉我们你是如何得到这些损坏的 JSON 数据的。
-
你的问题至少对我来说没有意义。当某些东西不是有效的 JSON 时,它不能被称为 JSON。它只是一个字符串。
-
我得到这个 json 作为 Soap Web 服务响应的一部分,如下所示:
[{"ResponseCode":1,"ResponseMsg":"[{\"Code\":\"CA2305181\ ",\"消息\":\"处理成功。\"}]"}] -
首先,服务应该立即修复。另外,我认为末尾还有一个额外的双引号 }]\"}]。那个双引号也是错误的吗?
-
方括号前的双引号结束