【问题标题】:FasterXML Jackson: The JSON @ symbol?FasterXML Jackson:JSON @ 符号?
【发布时间】:2015-03-11 23:36:45
【问题描述】:

我有以下 JSON:

"segmentid": {
    "mot": {
        "@displaytype": "B",
        "@type": "BLT",
        "#text": "Buss"
    },...

以下问题:

  • @ 表示法有什么用?
  • 如果出于特定原因使用,我如何在 Jackson 中使用它?

【问题讨论】:

  • 是什么让您认为它是 Jackson 特有的,而不仅仅是 JSON 密钥的名称?
  • @SotiriosDelimanolis 对不起,如果我不清楚,但我知道这不是杰克逊特定的,它是 JSON 特定的。我在问是否有可能被杰克逊以某种方式使用。
  • 它绝对不是 JSON 特定的,因为 JSON specification 没有给字符 @# 赋予特殊含义。我已经看到它在 Jackson 中用于继承层次结构处理,但没有迹象表明这就是你在这里所拥有的(除了它被称为 type)。
  • 例如见here。或here(旧版本)。
  • Here's 另一个。

标签: java json jackson


【解决方案1】:

在这种情况下,它似乎只是一个普通的 JSON 属性。

你可以在你的类中使用@JsonProperty注解来获取它:

public YourJacksonClass {
     @JsonProperty("@displayType")
     private String displayType;

     @JsonProperty("@type")
     private String type;

     @JsonProperty("#text")
     private String text;
}

或者,如果您正在使用返回JsonNodereadTree 方法,则只需正常访问即可:

JsonNode node = mapper.readTree(...);
String type = node.get("segmentid").get("mot").get("@type");

当需要将类型信息与对象一起序列化时,通常使用以“@”为前缀的属性。

@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="@type")

在您的ObjectMapper 中使用TypeIdResolver 时,读取类型(在您的情况下为"BLT")然后可以转换为实际类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2017-11-26
    相关资源
    最近更新 更多