java - 将 ArrayList 中的每个元素保存到 Jackson 的新行中
问题描述
我有一个 POJO:
public class Game {
private String title;
private Set<String> genres;
private String size;
private List<String> screenshots;
}
我想将游戏对象保存到 JSON。
ObjectMapper
配置:
public static ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.enable(SerializationFeature.INDENT_OUTPUT);
将对象保存到 JSON:
mapper.writeValue(new File(PATH), game)
JSON 看起来像:
{
"title" : "Dead Cells",
"genres" : [ "Action" ],
"size" : "761M",
"screenshots" : [ "https://lh3.googleusercontent.com/af9mFH4XinZ7f6dx-Ygm9molYPAcMHhhZyQ0udDBd9S9-44v_VBdeA0rjSlQyJRpQg=w1440-h620-rw", "https://lh3.googleusercontent.com/mo0CZaV_aGflOPB8Tzo697l1WoZuoYUN9TiPMWq0zE29v_I99n1Qg185MfHrU-53nxAG=w1440-h620-rw", "https://lh3.googleusercontent.com/FEiHmVyoT1MU3rbAxSkE_aNDuXBuo3YHQOnqfMAfehS-d4k6CvxuyxpX6KKSbJp3Xv28=w1440-h620-rw", "https://lh3.googleusercontent.com/3Zg_EtwMpt-vWNBTdCNE7hP8M6qeDMq91HKfx70FSJ5tVAsPxHkTYWGiCwvHg5ucMykK=w1440-h620-rw", "https://lh3.googleusercontent.com/A9K6iPYty9IvkzeO_29ONdPAnFFs1BBzk6w-dAf1s5JgpZFMpxc5wpbz07fzovJWxlzO=w1440-h620-rw" ]
}
如您所见,所有屏幕截图都像一个字符串一样打印,但我想要这样的结果:
{
"title" : "Dead Cells",
"genres" : [ "Action" ],
"size" : "761M",
"screenshots" : [ "https://lh3.googleusercontent.com/af9mFH4XinZ7f6dx=w1440-h620-rw",
"https://lh3.googleusercontent.com/I99n1Qg185MfHrU-53nxAG=w1440-h620-rw",
"https://lh3.googleusercontent.com/d4k6CvxuyxpX6KKSbJp3Xv28=w1440-h620-rw",
"https://lh3.googleusercontent.com/wvHg5ucMykK=w1440-h620-rw",
]
}
我该怎么做?
解决方案
您可以使用 ObjectMapper 的 writerWithDefaultPrettyPrinter,如下面的代码:
Game game = new Game();
ObjectMapper mapper = new ObjectMapper();
File file = new File("pretty-print.json");
mapper.writerWithDefaultPrettyPrinter().writeValue(file, game);
您的数据的输出是:
{
"title" : "Dead Cells",
"genres" : [ "Action" ],
"size" : "761M",
"screenshots" : [
"https://lh3.googleusercontent.com/af9mFH4XinZ7f6dx-Ygm9molYPAcMHhhZyQ0udDBd9S9-44v_VBdeA0rjSlQyJRpQg=w1440-h620-rw",
"https://lh3.googleusercontent.com/mo0CZaV_aGflOPB8Tzo697l1WoZuoYUN9TiPMWq0zE29v_I99n1Qg185MfHrU-53nxAG=w1440-h620-rw",
"https://lh3.googleusercontent.com/FEiHmVyoT1MU3rbAxSkE_aNDuXBuo3YHQOnqfMAfehS-d4k6CvxuyxpX6KKSbJp3Xv28=w1440-h620-rw",
"https://lh3.googleusercontent.com/3Zg_EtwMpt-vWNBTdCNE7hP8M6qeDMq91HKfx70FSJ5tVAsPxHkTYWGiCwvHg5ucMykK=w1440-h620-rw",
"https://lh3.googleusercontent.com/A9K6iPYty9IvkzeO_29ONdPAnFFs1BBzk6w-dAf1s5JgpZFMpxc5wpbz07fzovJWxlzO=w1440-h620-rw" ]
}
推荐阅读
- css - 复选框的离子选择 UI
- python - 翻转字符串中的二进制文件
- firebase - 只允许某些主机访问我的 Firebase Cloud Function
- c# - 为什么运行时不打印日志“End-Test”,但在调试时打印?
- performance - BS4:如何将 find_all 减少到最低限度(忽略而不是提取)
- android - 我们如何知道以编程方式在 android 设备中注册了多少指纹..以便只允许在应用程序中使用选定的指纹
- cmake - find_package 静态库而不是共享库
- python - string.replace() 定义它时向我输出错误
- android - 如何在相对路径中从 MediaStore 读取文件?
- python - 如何使用 Selenium 和 Python 上传文件