簡體   English   中英

Jackson-Json因為值中的額外引號而解析失敗

[英]Jackson- Json parsing failure because of extra quotes in values

我正在努力使用jackon將json字符串轉換為java對象。 這可能是重復的問題,但我找不到任何解決此問題的方法:

這是json字符串:

{
"hierCD":"B",
"category":"C",
"id":"ty8lre",
"bca":"8543289",
"companyName":""not listed"",
"productLineCD":"CARD"
}

Java Bean:

public class HierAttributes{
protected String id;
protected String bca;
protected String companyName;
protected String productLineCD;
protected String hierCD;
protected String category;
}

嘗試使用jackson以這種方式將json轉換為對象:

ObjectMapper mapper = new ObjectMapper(new JsonFactory());
mapper.readValue(nodeStr, HierAttributes.class);

我得到以下異常:

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('n' (code 110)): was expecting comma to separate OBJECT entries
 at [Source: {"hierCD":"B","category":"C","id":"ty8lre","bca":"8543289","companyName":""not listed"","productLineCD":"CARD"}; line: 1, column: 77]
    at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1581)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:533)
    at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:462)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipComma(ReaderBasedJsonParser.java:1957)
    at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextFieldName(ReaderBasedJsonParser.java:770)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:265)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2726)

有什么辦法讓傑克遜在解析時會逃避字段值中的其他引號( ""not listed"" )? 如何解決這個解析問題?

第一

接受這是無效的JSON,你必須在傑克遜為你解析它之前改變它。

第二

如果雙引號加倍是唯一的問題,那么在將字符串傳遞給jackson之前使用以下之一預處理該字符串:

  1. 刪除雙引號: newValue = initialValue.replaceAll("\\"\\"", "\\"");
  2. 在內部引號中添加反斜杠。 newValue2 = StringUtils.replace(initialValue, "\\"\\"", "\\"\\\\\\"");

我建議在上面的選項2中使用Apache Commons Lang3 StringUtils。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM