【问题标题】:Java jackson deserialize json - Getting symbol "=" instead of ":"Java jackson反序列化json - 获取符号“=”而不是“:”
【发布时间】:2020-12-21 21:59:22
【问题描述】:

这就是我所拥有的。我正在尝试反序列化一个 json,但它不起作用:

public class MyClass {
    private Object attribute;

    @JsonCreator
    public MyClass(Object attribute) {
        this.attribute = attribute;
    }

    @JsonProperty("attr")
    public Object getAttribute() {
        return attribute;
    }
}
public void method() {
  InputStream eventsStream = this.getClass().getClassLoader()
                .getResourceAsStream("fileName.json");

  ObjectMapper objectMapper = new ObjectMapper();
  objectMapper.readValue(eventsStream, MyClass.class);
}



fileName.json
{
  "value1": 1,
  "value2": [
    {
      "subValue1": "valueExample"
    }
  ]
}

我用符号“=”而不是“:”得到这个结果:

{value1=1, value2=[{subValue=valueExample}]}

它必须是一个属性或类似的东西。任何的想法?谢谢

【问题讨论】:

    标签: java-8 jackson


    【解决方案1】:

    为什么不将反序列化保存到变量中?

    MyClass myClassObject = objectMapper.readValue(eventsStream, MyClass.class);
    

    如果你这样做,你将直接在myClassObject 中的反序列化对象,因此你可以轻松使用它。 另一种反序列化的方法是使用 Gson 来实现,例如:

    new Gson().fromJson(eventStream.toString(), MyClass.class); //you need the eventStream as a String type
    

    导入的是这个:

    import com.google.gson.Gson;
    

    您能告诉我们为什么需要打印反序列化的值吗?

    【讨论】:

    • 实际上,我保存到一个变量中并将其与我的预期进行比较,结果不匹配。我只展示了打印的内容。我不能使用 Gson,因为它是遗留代码,他们不允许我包含该库,它应该与 jackson 一起使用
    • 那么这可能是由于 toString 方法的原因,它看起来与序列化的不一样。也许为了获得相同的结果,您应该比较 2 个序列化的 json 或 2 个反序列化的 json。在您的情况下,您可以序列化您的结果并查看它是否匹配,另一个想法是根据需要重写 toString 方法,以便将 '=' 替换为 ':'。
    • 实际上,我也尝试过 assertEquals,它说是预期的 blablabla":" 但是是 blablabla"="
    • 使用 assertEquals 出现错误是正常的
    • 嗨!因此,我查看了您的问题,并将文件中的 json 与您可以使用的结果进行比较:objectMapper.writeValueAsString(myClass)
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2020-12-10
    • 2017-11-29
    • 2015-02-28
    相关资源
    最近更新 更多