Как прочитать массив объектов из JSON с помощью GSON? - PullRequest
0 голосов
/ 06 июня 2019

Я написал файл JSON с информацией, которую мне нужно использовать для создания массива

Это JSON, который я использую

[{
  "matr": [0,0],
  "room": "b",
  "door": true,
  "respawnPoint": false
},
{
  "matr": [0,1],
  "room": "b",
  "door": false,
  "respawnPoint": false
},...
]    

и вот как я пытаюсь десериализовать его с помощью Java

String path="src/main/resources/room.json";
            JsonReader reader= new JsonReader(new FileReader(path));
            SupportPosition[] a=new Gson().fromJson(path, 
SupportPosition[].class);    

но эта ошибка появляется

 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $    

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Разбор массива JSON в java.util.List с Gson Я думаю, что ваш вопрос уже был дан ответ в другом посте. Взгляните на это.

public class Human {

    String name;
    Integer age;

    //getters and setters
}

Основной класс ниже:

public class Solution{
 public static void main(String[] args) {

        ObjectMapper mapper = new ObjectMapper();
        String json = "[{\"name\":\"Dummy\", \"age\":37}, {\"name\":\"Dummy2\", \"age\":38}]";

        try {

            // 1. convert JSON array to Array objects
            Human[] HumanObjects = mapper.readValue(json, Human[].class);

            System.out.println("JSON array to Array objects...");
            for (Human Human : HumanObjects) {
                System.out.println(Human);
            }

            // 2. convert JSON array to List of objects
            List<Human> ppl2 = Arrays.asList(mapper.readValue(json, Human[].class));

            System.out.println("\nJSON array to List of objects");
            ppl2.stream().forEach(x -> System.out.println(x));

            // 3. alternative
            List<Human> pp3 = mapper.readValue(json, new TypeReference<List<Human>>() {});

            System.out.println("\nAlternative...");
            pp3.stream().forEach(x -> System.out.println(x));

        } catch (Exceptoion e) {
            e.printStackTrace();
        }

    }
    }

Использовать нужно для импорта "Джексон". Возможно, добавьте зависимость Maven. Дайте мне знать, если это поможет.

0 голосов
/ 06 июня 2019

Вы передаете путь к файлу в качестве параметра в конструктор Gson. Вы должны передать объект JsonReader в конструктор Gson в качестве параметра.

JsonReader reader= new JsonReader(new FileReader(path));
        SupportPosition[] a=new Gson().fromJson(reader, SupportPosition[].class);

попробуй и дай мне знать.

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