Java - 使用 Jackson 转换为正确的 json 格式

标签 java json jackson

我正在使用 Jackson 将 Java 对象写入 Json。

这就是我得到的

{
"obj": [{
    "Id": 1,
    "type": "type1",
    "properties": [{
        "name": "PropN",
        "value": "ValN"
    }]
}, {
    "id": 2,
    "type": "type",
    "properties": [{
        "name": "Prop3",
        "value": "Val3"
    }]
}]

}

这就是我需要得到的:

{
    "obj": [{
            "id": 1,
            "type": "type",
            "properties": {
                "name": "Eb1"
            }
        },
        {
            "id": 2,
            "type": "type",
            "properties": {
                "name": "Eb2"
            }
        }
    ]
}

我不知道如何从 json 中获取属性名称和值“标签”,并且将属性数组删除到列表中。

我的 Properties 数组是一个简单的 POJO,Obj 类有一个属性 ArrayList。

有人可以告诉我如何完成这个任务吗?

谢谢。

最佳答案

您可以使用quicktype生成您需要的确切类型。以下是它使用您需要的 JSON 生成的内容:

// Converter.java

// https://stackoverflow.com/questions/49055781/java-convert-to-correct-json-format-using-jackson
//     import io.quicktype.Converter;
//
// Then you can deserialize a JSON string with
//
//     StackOverflow data = Converter.fromJsonString(jsonString);

package io.quicktype;

import java.util.Map;
import java.io.IOException;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.core.JsonProcessingException;

public class Converter {
    // Serialize/deserialize helpers

    public static StackOverflow fromJsonString(String json) throws IOException {
        return getObjectReader().readValue(json);
    }

    public static String toJsonString(StackOverflow obj) throws JsonProcessingException {
        return getObjectWriter().writeValueAsString(obj);
    }

    private static ObjectReader reader;
    private static ObjectWriter writer;

    private static void instantiateMapper() {
        ObjectMapper mapper = new ObjectMapper();
        reader = mapper.reader(StackOverflow.class);
        writer = mapper.writerFor(StackOverflow.class);
    }

    private static ObjectReader getObjectReader() {
        if (reader == null) instantiateMapper();
        return reader;
    }

    private static ObjectWriter getObjectWriter() {
        if (writer == null) instantiateMapper();
        return writer;
    }
}

// StackOverflow.java

package io.quicktype;

import java.util.Map;
import com.fasterxml.jackson.annotation.*;

public class StackOverflow {
    private Obj[] obj;

    @JsonProperty("obj")
    public Obj[] getObj() { return obj; }
    @JsonProperty("obj")
    public void setObj(Obj[] value) { this.obj = value; }
}

// Obj.java

package io.quicktype;

import java.util.Map;
import com.fasterxml.jackson.annotation.*;

public class Obj {
    private long id;
    private String type;
    private Properties properties;

    @JsonProperty("id")
    public long getID() { return id; }
    @JsonProperty("id")
    public void setID(long value) { this.id = value; }

    @JsonProperty("type")
    public String getType() { return type; }
    @JsonProperty("type")
    public void setType(String value) { this.type = value; }

    @JsonProperty("properties")
    public Properties getProperties() { return properties; }
    @JsonProperty("properties")
    public void setProperties(Properties value) { this.properties = value; }
}

// Properties.java

package io.quicktype;

import java.util.Map;
import com.fasterxml.jackson.annotation.*;

public class Properties {
    private String name;

    @JsonProperty("name")
    public String getName() { return name; }
    @JsonProperty("name")
    public void setName(String value) { this.name = value; }
}

关于Java - 使用 Jackson 转换为正确的 json 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49055781/

相关文章:

json - 快速解码 JSON 数组或字典错误

java - 无法构造 java.time.LocalDateTime 的实例 - Jackson

java - JAX-RS 如何反序列化嵌入在公共(public)包装器对象中的 JSON 对象以及在没有包装器的情况下反序列化

android - 如何修复使用 Jackson/Gson 库解析的不准确的日期时间(分钟)?

java - Java 中的持久 HttpURLConnection

java - Flex 编译器不适用于 32 位 JVM(1.8.0_25)

java - 在 Java 桌面应用程序中打开 PDF

java - 降低 Maven 构建线程/进程的优先级

javascript - 修改 d3.js 圆环图以从 json 数组读取

python - 类型错误 : string indices must be integers when I try and get values from JSON