gpt4 book ai didi

java - 如何使用 Gson 从 JSON 一次读取一个变量?

转载 作者:行者123 更新时间:2023-12-01 17:34:24 31 4
gpt4 key购买 nike

我有一个 JSON 文件,其中包含我想使用 Gson 读取的内容 {"var1": true, "var2": false}

但我不想将其保存为单个对象,而是希望能够使用单个变量的名称来获取它们的值,并将它们存储在单独的字段中,如下例所示:

File file = "json.json";
Boolean javaVar1 = file.get("var1");
Boolean javaVar2 = file.get("var2");

最佳答案

我写了一些测试也许会对你有帮助

您的意思是读取文件并提取值

import com.google.gson.Gson;
import com.google.gson.internal.LinkedTreeMap;
import org.junit.Test;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Map;

import static org.junit.Assert.assertEquals;

public class GsonTest {
@Test
public void deserialize() throws IOException {
//given
String path = "G:\\praca\\app\\stackoverflow\\mijaGson\\src\\test\\java\\pl\\jac\\mija\\gson\\simple\\json.json";
String json = Files.lines(Paths.get(path), StandardCharsets.UTF_8).findFirst().orElse("{}"); //--> = "{\"var1\" : true, \"var2\" : false}";
//when
Map<String, Boolean> map = new Gson().fromJson(json, LinkedTreeMap.class);
Boolean javaVar1 = map.get("var1");
Boolean javaVar2 = map.get("var2");
//then
assertEquals(true, javaVar1);
assertEquals(false, javaVar2);
}

}

或者找到正确的值

import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.internal.bind.ObjectTypeAdapter;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import org.junit.Test;

import java.io.IOException;
import java.io.StringReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

import static org.junit.Assert.assertEquals;

public class TestJsonReader {
@Test
public void deserialize() throws IOException {
//given
String path = "G:\\praca\\app\\stackoverflow\\mijaGson\\src\\test\\java\\pl\\jac\\mija\\gson\\simple\\json.json";
String json = Files.lines(Paths.get(path), StandardCharsets.UTF_8).findFirst().orElse("{}"); //--> = "{\"var1\" : true, \"var2\" : false}";
//when
Boolean javaVar1 = readJson(json, "var1");
Boolean javaVar2 = readJson(json, "var2");
//then
assertEquals(true, javaVar1);
assertEquals(false, javaVar2);
}

private Boolean readJson(String json, String keyValue) throws IOException {
JsonReader in = new JsonReader(new StringReader(json));
TypeAdapter<Object> objectTypeAdapter = ObjectTypeAdapter.FACTORY.create(new Gson(), TypeToken.get(Object.class));
in.beginObject();
while (in.hasNext()) {
String key = in.nextName();
if (key.equals(keyValue)) {
return (Boolean) objectTypeAdapter.read(in);
}
in.skipValue();
}
in.endObject();
return null;
}

;
}

关于java - 如何使用 Gson 从 JSON 一次读取一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61066177/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com