java - 如何使用 gson 创建一组键值对?

标签 java gson

我目前有这段代码,如何添加它以便我可以从 Gson 获取 JsonObject 将其附加到现有的 Json 文件中?

private static void writeFile(File f, String w_username, String w_password) throws IOException{
    Gson gson = new Gson();
    JsonWriter writer = new JsonWriter(new FileWriter(f));
}

最佳答案

JSON 结构不允许仅在文件末尾附加 更多数据。在这种情况下,更合适的可能是 CSV 格式。

要解决您的问题,您需要将整个文件读取为 JsonObject,添加新的“键值”对并将其保存回来。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Objects;

public class GsonApp {

    public static void main(String[] args) throws IOException {
        File store = Files.createTempFile("store", "json").toFile();

        // Add two users
        JsonFileAppender jsonFileAppender = new JsonFileAppender();
        jsonFileAppender.appendToObject(store, "jon", "ewemn!32");
        jsonFileAppender.appendToObject(store, "rick", "923djks");

        // Print whole file
        System.out.println(String.join("", Files.readAllLines(store.toPath())));
    }
}

class JsonFileAppender {
    private final Gson gson;

    public JsonFileAppender() {
        this.gson = new GsonBuilder().create();
    }

    public void appendToObject(File jsonFile, String username, String password) throws IOException {
        Objects.requireNonNull(jsonFile);
        Objects.requireNonNull(username);
        Objects.requireNonNull(password);
        if (jsonFile.isDirectory()) {
            throw new IllegalArgumentException("File can not be a directory!");
        }

        JsonObject node = readOrCreateNew(jsonFile);
        node.addProperty(username, password);

        writeToFile(jsonFile, node);
    }

    private JsonObject readOrCreateNew(File jsonFile) throws IOException {
        if (jsonFile.exists() && jsonFile.length() > 0) {
            try (BufferedReader reader = new BufferedReader(new FileReader(jsonFile))) {
                return gson.fromJson(reader, JsonObject.class);
            }
        }

        return new JsonObject();
    }

    private void writeToFile(File jsonFile, JsonObject node) throws IOException {
        try (FileWriter writer = new FileWriter(jsonFile)) {
            gson.toJson(node, writer);
        }
    }
}

上面的代码打印:

{"jon":"ewemn!32","rick":"923djks"}

关于java - 如何使用 gson 创建一组键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58975277/

相关文章:

java - Gson:需要一个字符串但是是 BEGIN_OBJECT

java - 如果 JSON 字符串具有该变量,是否会为具有 transient 属性的变量分配值?

java - 我无法使用 Gson 将 Json 文件解析为 java 对象

java - 将 String 转换为 java.sql.Time 并将 java.sql.Time 转换为 Double

java - 为什么会出现java.lang.StringIndexOutOfBoundsException?

java - 在 Java 中收集应用程序指标(可选 .Net)

java - 尝试使用 koush/ion 获取 JSON 并获取 DexException

java - 如何在 Java 中编写一个通用函数以接收具有不同键类型的映射参数?

java - Android 自定义画笔颜色

android - 如何使用 Android Native 在 session (SharedPreferences)中保存 JSONResponse?