Как читать переменные по одной из JSON, используя Gson? - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть JSON файл с содержимым {"var1" : true, "var2" : false}, который я хочу прочитать с помощью Gson.

Но вместо того, чтобы сохранить его как один объект, я хочу иметь возможность получить значения одного переменные используют их имена для хранения их в отдельных полях, как в примере ниже:

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

1 Ответ

0 голосов
/ 07 апреля 2020

Я написал несколько тестов, может быть, это поможет вам

Вы хотите прочитать файлы и извлечь значения

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;
  }

  ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...