【问题标题】:Configure Jackson to deserialize single quoted (invalid) JSON配置 Jackson 以反序列化单引号(无效)JSON
【发布时间】:2023-03-31 23:05:01
【问题描述】:

我是使用 jackson 库的新手。

我正在尝试这样做 [见下文],但它正在抛出错误。

String x="{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}";
ObjectMapper mapper = new ObjectMapper();

try {
    JsonNode df=mapper.readValue(x,JsonNode.class);
    int i=0;
} catch .....

例外:

org.codehaus.jackson.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
at [Source: java.io.StringReader@1afd1810; line: 1, column: 3]
  at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291)

如果我用双引号(“)替换单引号('),同样的效果。

【问题讨论】:

标签: java jackson


【解决方案1】:

它不是有效的 JSON,但您可以告诉 Jackson 允许它。方法如下。

String x = "{'candidateId':'k','candEducationId':1,'activitiesSocieties':'Activities for cand1'}";
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
JsonNode df = mapper.readValue(x, JsonNode.class);
System.out.println(df.toString());
// output: {"candidateId":"k","candEducationId":1,"activitiesSocieties":"Activities for cand1"}

【讨论】:

  • @Bruce 感谢 Bruce 的建议。这正是我想要的。
【解决方案2】:

JSON 中的字符串只能使用双引号 (") 指定,不能 使用单引号 ('),这就是您出错的原因;使用双引号。

这是指定有效 JSON 字符串的管道图(注意它们只能用双引号封装!)


(来源:json.org

(有关 JSON 的完整规范,请参阅 json.org。)

【讨论】:

  • 问题是我可以在 javascript 中用单引号形成一个绝对有效的 json 对象,但我无法在 java 中解析它。在用jackson解析之前,我是否必须用双引号替换单引号
  • @Pipalayan:问题是单引号在 JSON 中 not 有效,请查看规范。您无法使用此库解析单引号,因为简单地说,您向解析器提供了无效输入。
  • "我可以在 javascript 中用单引号形成一个绝对有效的 json 对象" -- JavaScript 可能允许使用单引号,但这并不意味着它是有效的 JSON。
【解决方案3】:

这就是我的工作方式:

var jsonString ='{"it":"Stati Uniti d'America"}';
jsonString =jsonString.replace("'", "\\\\u0027");

【讨论】:

    猜你喜欢
    • 2021-05-18
    • 2013-08-01
    • 1970-01-01
    • 2023-03-04
    • 2015-03-13
    • 1970-01-01
    • 2015-02-28
    • 2018-12-16
    • 2012-03-29
    相关资源
    最近更新 更多