java对象的动态json字符串

lf3rwulv  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(315)

这个问题在这里已经有答案了

具有未知动态属性的jackson反序列化(2个答案)
上个月关门了。
如何将这个具有动态属性的json字符串Map到java对象?

{    
    'name' : 'John',
    'lastname': 'Doe',
    'dynamicProperty1': { 'label' : 'size', 'value': 'large'},
    'dynamicProperty2': { 'label' : 'color', 'value': 'blue'},
    'dynamicProperty3': { 'label' : 'height', 'value': 200},
    'dynamicProperty...': { 'label' : 'points', 'value': 300}
}
ne5o7dgx

ne5o7dgx1#

您可以实现一个java类来保存name、lastname和hashmaps来存储动态属性。示例-

public class Person {
   String name;
   String lastName;
   Map<String,Object> dynamicProperty1;
   Map<String,Object> dynamicProperty2;
   Map<String,Object> dynamicProperty3;
}

或者,如果您有数量可变的动态属性Map(如注解中所建议的),您可以执行以下操作

public class Person {
   String name;
   String lastName;
   Map<String,Map<String, Object>> dynamicPropertyMaps;
 }

然后在mapper类中,可以基于json中的值创建hashmaps,并将它们放入dynamicpropertymapsMap中。

cnjp1d6j

cnjp1d6j2#

你可以用 JsonAnySetter 注解:

import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;

import java.io.File;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

public class HandleDynamicKeysInJsonApp {

    public static void main(String[] args) throws IOException {
        File jsonFile = new File("./resource/test.json").getAbsoluteFile();

        ObjectMapper mapper = new ObjectMapper();

        Person person = mapper.readValue(jsonFile, Person.class);
        System.out.println(person);
    }
}

@Data
class Person {
    private String name;

    @JsonProperty("lastname")
    private String lastName;

    private Map<String, Label> labels = new LinkedHashMap<>();

    @JsonAnySetter
    public void addDynamicProperties(String key, Label label) {
        labels.put(key, label);
    }
}

@Data
class Label {
    private String label;
    private Object value;
}

动态特性未知的jackson反序列化
如何将任何对象序列化为uri?
如何将json反序列化为一个java类,该类具有已知的强制字段,但可以具有多个未知字段?

相关问题