簡體   English   中英

如何從具有不同字段結構的JSON創建Java obj

[英]How to create Java obj from JSON with varying field structure

我有以下格式的json

[
    {
        "id": "one",
        "type": "Integer",
        "value": "10"
    },
    {
        "id": "two",
        "type": "String",
        "value": "StringValue"
    },
    {
        "id": "three",
        "type": "com.something.special",
        "value": {
            "splFiel1": "filedOne",
            "splFiel2": "fielTwo",
            "splFiel3": "fieldThree"
        }
    }
]

每個數組元素始終將具有三個字段id,type和value。 字段“值”的結構將取決於字段“類型”,並可以基於此而改變。

我想將此json轉換為Java對象,以便可以輕松訪問“ value” obj及其子字段。 我不認為這是將json轉換為java對象的常規方法,是由於基於同一json中字段“ type”的“ value”字段的字段結構有所不同。

能做到嗎? 我正在嘗試使用jackson json進行此操作,但是如果您有更好的選擇,請提出建議。

請提供任何想法,建議,參考鏈接。

您可以使用以下POJO轉換給定的JSON

public class Example {

@SerializedName("id")
private String id;
@SerializedName("type")
private String type;
@SerializedName("value")
private String value;
}

對於第三個字段,可以將其保留為簡單字符串。 然后,只要您希望將其內容解析為適當的構造java類,就可以檢查其中的類型並將json字符串解析為某個java對象

使用Google GSON庫讀取JSON文件。

使DataStructure存儲JSON數據。 dataStructure的value字段是字符串類型。 如果它存儲JSON字符串,則再次執行JSON解析。

class Data{

    String id;
    String type;
    String value;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getValue() {
        return value;
    }
    public void setValue(String value) {
        this.value = value;
    }
    @Override
    public String toString() {
    return "Data [id=" + id + ", type=" + type + ", value=" + value + "]";
    }

}

public class JSONData {

    public static void main(String[] args) throws FileNotFoundException{

         Gson gson = new Gson();
         JsonParser parser = new JsonParser();

        JsonReader reader = new JsonReader(new InputStreamReader(new FileInputStream("in.json")));

        JsonArray jArray = parser.parse(reader).getAsJsonArray();

        List<Data> datas = new ArrayList<>();

        for (JsonElement object : jArray) {

            Data data = new Data();

            JsonObject jObject = gson.fromJson(object, JsonObject.class);

            data.setId(jObject.get("id").toString());
            data.setType(jObject.get("type").toString());
            data.setValue(jObject.get("value").toString());

            System.out.println(data);
            datas.add(data);
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM