JSON属性中的特殊字符

时间:2018-10-25 09:28:44

标签: java jackson

我有JSON,该JSON的属性中带有冒号(:)。现在,我想知道如何使用java类属性来映射此属性名称。

我尝试了@JsonProperty("viacom:VideoDuration"),但是它不起作用。

这是示例json

{
       "shortTitle": "Teen Wolf",
       "viacom:VideoDuration": "20h:30m",
       "viacom:metadataLanguage": "en",
       "viacom:contentType": "franchise",
       "viacom:urlKey": "http://urlkey.com",
       "viacom:vmid":"cee71f4a-ec7d-4ccd-a10d-9bf6b7506d352",
       "viacom:originLanguage":"en"
}
  

注意:我没有选择将json property名称重命名为其他名称。

1 个答案:

答案 0 :(得分:1)

可能是您正在使用的库或其版本问题。 我刚刚创建了一个简单的测试,它已经正常运行。

测试类:

public class TestClass {

  private String valueStr;
  @JsonProperty("test:prop")
  private String testProp;

  public String getValueStr() {
    return valueStr;
  }

  public void setValueStr(String valueStr) {
    this.valueStr = valueStr;
  }

  public String getTestProp() {
    return testProp;
  }

  public void setTestProp(String testProp) {
    this.testProp = testProp;
  }
}

并测试:

@Test
  public void test()
      throws JsonParseException, JsonMappingException, IOException {

    String test = "{\r\n" +
        "       \"test:prop\": \"Teen Wolf\",\r\n" +
        "       \"valueS\": \"franchise\"\r\n" +
        "}";

    ObjectMapper mapper = new ObjectMapper();
    TestClass data = mapper.readValue(test, TestClass.class);
    Assert.assertTrue("expected Teen Wolf, actual=" + data.getTestProp(),
        Objects.equals("Teen Wolf", data.getTestProp()));
  }

我使用了com.fasterxml.jackson.databind.ObjectMapper中的com\fasterxml\jackson\core\jackson-databind\2.8.8\jackson-databind-2.8.8.jar

在Java类中,"viacom:VideoDuration"属性的类型是什么?我的意思是如果问题不是属性名称而是值呢?它也有一个冒号,您正在尝试以错误的方式反序列化它吗?