【问题标题】:Convert dynamic json to java object with dynamic string value. No key value json structure将动态 json 转换为具有动态字符串值的 java 对象。无键值json结构
【发布时间】:2020-07-16 09:05:26
【问题描述】:

我想将下面的 JSON 结构转换为 java 对象,Annotation bases。

pojo java 类结构是什么?

{
      "Data1":{
            "Name":"abc",
            "Number":2
           }
     }

Data1 可以是任何字符串,如果它第一次作为 data1 出现,下次它可以像“xyz”。

我们如何使用fasterxml json注解转换它?

【问题讨论】:

  • json是你自己制作的?是否可以创建另一个名为“dataName”的字段并将名称和编号放在同一级别?如果没有此更改,则无法使用基于注释的反序列化器
  • 没有。我是消费者。需要直接在pojo中转换
  • 因此您必须使用映射结构而不是基于注释的反序列化器:请参阅此处baeldung.com/jackson-mapping-dynamic-object#using-map
  • 我需要将我的 java 对象传递给第三方。因为这个回应会来
  • 什么意思?尝试在你的问题中做一个完整的例子

标签: java json object


【解决方案1】:
class Node {
    public String name;
    public int number 
}

class ConvertedPojo {
    public Map<String, Node> attributes;
}

由于 Data1 可以是任何字符串,因此您需要一个映射,它将所有不同的字符串存储为键,值存储为 json 对象

【讨论】:

  • 试过这个。空地图来了
【解决方案2】:

类结构将是:

public class Data1{
    @JsonProperty("Name")
    private String name;
    @JsonProperty("Number")
    private int number;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        name = name;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        number = number;
    }
}

public class Data {
    @JsonProperty("Data1")
    Object data1;
    public Object getData1() {
        return data1;
    }
    public void setData1(Object data1) {
        this.data1 = data1;
    }

}

注意变量命名约定。

要测试的代码:

public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        Data data1 = mapper.readValue("{\"Data1\":{\"Name\":\"abc\",\"Number\":2}}", Data.class);
        System.out.println(mapper.writeValueAsString(data1));//{"Data1":{"Name":"abc","Number":2}}


        Data data2 = mapper.readValue("{\"Data1\":\"data value\"}", Data.class);
  
  System.out.println(mapper.writeValueAsString(data2));//{"Data1":"data value"}
    }

【讨论】:

  • Data1 是字符串值。没有任何类/节点。可以改的
  • Data1 无法修复,因为它是一个可变字符串
猜你喜欢
  • 2014-02-08
  • 1970-01-01
  • 2018-03-16
  • 2021-03-24
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多