簡體   English   中英

Json使用相同的名稱進行序列化和反序列化

[英]Json serialize and deserialize with same name

當我使用請求正文調用API ,我會在POJO使用變量名反序列化它。 我修改了相同的列表並返回,但它重復了該列表

@JsonSerialize
@JsonIgnoreProperties(ignoreUnknown = true)
public class UASchema {

    @JsonProperty("metric_id")
    private ArrayList<String> fMetricId;
    @JsonProperty("schema")
    private ArrayList<String> fSchema;
    @JsonProperty("hash")
    private String fHash;
...
...
//getter and setters
}

請求正文為

{
    "data" : [
        {
            "metric_id": ["k1", "ak2", "d90"],
            "schema": ["s1", "s2"]
        },
        {
            "metric_id": ["k21", "k22"],
            "schema": ["a11", "s22"]    
        }
    ]
}

我得到的響應是(添加了哈希)

{
    "result": [
        {
            "fmetricId": [
                "k1",
                "ak2",
                "d90"
            ],
            "fschema": [
                "s1",
                "s2"
            ],
            "metric_id": [
                "k1",
                "ak2",
                "d90"
            ],
            "schema": [
                "s1",
                "s2"
            ],
            "hash": "389abc9093442cfd2aee1f20807ba467"
        },
        {
            "fmetricId": [
                "k21",
                "k22"
            ],
            "fschema": [
                "a11",
                "s22"
            ],
            "metric_id": [
                "k21",
                "k22"
            ],
            "schema": [
                "a11",
                "s22"
            ],
            "hash": "5f366dde65b69fa679f95a81f3115b7f"
        }
    ]
}

它復制該列表,但未正確序列化它。 我希望響應僅具有與請求正文相同的列表,並添加了哈希。

看起來您的算法會重復輸入,或者您手動生成了會重復輸出的getterssetters 默認情況下, Jackson不添加額外的條目。 參見下面的示例,您如何做到這一點,我在IDE生成了getterssetters 字段的f-fieldName模式已經過時,您應該使用常規名稱。 參見例如Google的Java指南

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

import java.io.File;
import java.util.List;
import java.util.UUID;

public class JsonApp {

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

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);

        Root root = mapper.readValue(jsonFile, Root.class);
        root.getData().forEach(s -> s.setfHash(UUID.randomUUID().toString()));

        System.out.println(mapper.writeValueAsString(root));
    }
}

class Root {
    private List<UASchema> data;

    public List<UASchema> getData() {
        return data;
    }

    public void setData(List<UASchema> data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "Root{" +
                "data=" + data +
                '}';
    }
}

class UASchema {

    @JsonProperty("metric_id")
    private List<String> fMetricId;

    @JsonProperty("schema")
    private List<String> fSchema;

    @JsonProperty("hash")
    private String fHash;

    public List<String> getfMetricId() {
        return fMetricId;
    }

    public void setfMetricId(List<String> fMetricId) {
        this.fMetricId = fMetricId;
    }

    public List<String> getfSchema() {
        return fSchema;
    }

    public void setfSchema(List<String> fSchema) {
        this.fSchema = fSchema;
    }

    public String getfHash() {
        return fHash;
    }

    public void setfHash(String fHash) {
        this.fHash = fHash;
    }

    @Override
    public String toString() {
        return "UASchema{" +
                "fMetricId=" + fMetricId +
                ", fSchema=" + fSchema +
                ", fHash='" + fHash + '\'' +
                '}';
    }
}

上面的代碼打印:

{
  "data" : [ {
    "metric_id" : [ "k1", "ak2", "d90" ],
    "schema" : [ "s1", "s2" ],
    "hash" : "80dcf06d-1d83-463c-afb8-edef8efdc71f"
  }, {
    "metric_id" : [ "k21", "k22" ],
    "schema" : [ "a11", "s22" ],
    "hash" : "a83d7981-4b80-4318-a632-f3c91d14379b"
  } ]
}

暫無
暫無

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

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