如何使用属性作为键将对象列表转换为JSON对象?

时间:2019-08-07 17:21:10

标签: java json

我有List个来自特定类的对象,这些对象具有一个name字段。我正在尝试将此列表转换为JSON对象,其中属性键将为该字段的name,并且该值始终设置为null

我的最终JSON应该如下所示:

{
  "Java": null,
  "React": null,
  "Spring": null
}

我的课看起来像这样:

public class Tag {
    private Long id;
    private String name; // Java, Spring, React

    // setters and getters omited
}

我尝试使用以下代码进行转换:

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
String json = ow.writeValueAsString(tagList);

但这只会返回一个JSON对象数组。

如何将列表转换成上述结构?

2 个答案:

答案 0 :(得分:2)

要么使用json库并手动创建JSON,要么使用更高级别的库,例如JacksonGson

基于更新后的问题,这是基于json库的代码,可产生所需的输出:

{"Java":null,"Spring":null}
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class TagConverter {
    public static void main(String[] args) {
        List<Tag> tags = new ArrayList<>();
        Tag t1 = new Tag("Java");
        Tag t2 = new Tag("Spring");
        tags.add(t1);
        tags.add(t2);
        JSONObject json = new JSONObject();
        for(Tag t : tags){
            json.put(t.name, JSONObject.NULL);
        }

        System.out.println(json);
    }

    private static class Tag{
        public Long id;
        public String name;

        public Tag(String name){
            this.name = name;
        }
    }
}

添加Maven依赖项或从maven获取库:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

答案 1 :(得分:0)

在这种情况下,您应该先将对象转换为键-值映射,而键是名称字段的值(此值不能重复,重复会导致覆盖先前的值),对于您的情况,值可以为 NULL ,然后将地图转换为JSON。