繁体   English   中英

将 Object 转换为 JSON 文件,然后转换为字节以保存到存储,然后返回到 Object

[英]Convert Object to JSON File then to Bytes to save to an Storage and then back to Object

假设我有 class Student,它只有 name 和 age 属性。

public class Student {
     private String studentName;
     private Integer age;
}

我想将这个 Student 对象转换为 JSON 文件(我想我可以用 Jackson 映射器做到这一点)

然后我需要将 this.json 文件存储到存储中,所以我有方法 save(String key, byte[] resource) 将任何类型的文件保存到存储中(.zip、.txt 等)。

所以我想知道我是否可以这样做:

  1. 用 jackson 将值写入字符串(Student 到 json)
  2. 获取此字符串的字节
  3. 使用 save(studentName, bytes) 保存到存储

回到学生object:

然后,当我从存储中搜索学生时,我需要像这样转换回字符串:

Charset charset = Charset.forName("UTF-8");
String string = new String(studentBytes, charset);

然后使用 Jackson 映射器将字符串返回给 Student

这是一个好方法吗(我认为不是因为这些字节实际上是一个 .json 文件,而是一个 java String 对象的字节)? 我有点困惑,因为我保存的“文件字节”来自字符串 object,但我找不到如何将学生 object 转换为“.json 文件”,不知道如何保存.json 文件(我不需要将其保存在磁盘中,因为我只需要将字节保存到云存储中),我如何将 Object 写入“在 memory.json 文件中”,或者可能不将其视为文件,就像字节一样对吗? 请指出正确的方向,比如如何将object直接写入一个json文件,然后存储这个文件字节?

是的,如果您想将 json 保存到文件以上传到 S3,这就是您想要的方式。 Jackson 具有本机 json 数据结构(我认为它称为JsonNode )但您不想将其保存到文件中。 只需将 json 字符串保存到文本文件中即可。

Student object 转换为字符串:

Student student = new Student("Joe", 25);
ObjectMapper mapper = new ObjectMapper();
String json_string = mapper.writeValueAsString(student);

您可以将此字符串保存到文本文件并上传到 S3。 当您想取回Student object 时:

ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(new File("student.json"), Student.class);

请注意,“json 文件”没有什么特别之处。 它只是一个扩展.json的文本文件。 它包含恰好采用 Json 格式的文本数据。 您可以将json_string保存到这样的文件中:

Path path = Paths.get("student.json");
byte[] strToBytes = json_string.getBytes();
Files.write(path, strToBytes);

(参考: https://www.baeldung.com/jackson-object-mapper-tutorial

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM