我有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对象数组。
如何将列表转换成上述结构?
答案 0 :(得分:2)
要么使用json
库并手动创建JSON,要么使用更高级别的库,例如Jackson
或Gson
。
基于更新后的问题,这是基于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。