2016-08-03 5 views
0

У меня есть файл в формате JSON в структуре:Как получить JsonArray из Json-файла?

[ 
    { 
     "name": "north america", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "south america", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "north europe", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "west europe", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "east europe", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "south europe", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "north africa", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "south africa", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "north asia", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "west asia", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "east asia", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "southeast asia", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "south asia", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    }, 
    { 
     "name": "oceania", 
     "population": 10, 
     "wealth": 0, 
     "education": 0, 
     "corruption": 0 
    } 
] 

предварить, я использую Gson разобрать мой файл JSON. То, что я хочу быть в состоянии сделать это хранить данные как JsonArray

То, что я написал, чтобы сделать это:

final Land[] landInfo = new Gson().fromJson(getClass().getResource("../res/LandInfo.json").toExternalForm(), Land[].class) 

Который говорит мне Expected BEGIN_ARRAY but was STRING at line 1 column 1 path $

Мой класс Land:

public class Land { 

    private String name; 

    private int population; 

    private int wealth; 

    private double education; 

    private double corruption; 



    public String getName() { 

     return name; 

    } 



    public int getPopulation() { 

     return population; 

    } 



    public void setPopulation(int population) { 

     this.population = population; 

    } 



    public int getWealth() { 

     return wealth; 

    } 



    public void setWealth(int wealth) { 

     this.wealth = wealth; 

    } 



    public double getEducation() { 

     return education; 

    } 



    public void setEducation(double education) { 

     this.education = education; 

    } 



    public double getCorruption() { 

     return corruption; 

    } 


    public void setCorruption(double corruption) { 

     this.corruption = corruption; 

    } 

} 

Почему я получаю этот результат от попытки получить массив из хорошо отформатированного Json-файла?

+0

Может быть, это поможет вам: http://stackoverflow.com/questions/3763937/gson-and-deserializing-an-array-of-objects-with-arrays -in-it – Klapsa2503

+0

Я попытался изменить свой код, удалив «все» и имея весь файл Json, инкапсулированный с помощью []. Однако моя ошибка аналогична: «Ожидалось BEGIN_ARRAY, но было STRING в строке 1 столбец 1 путь $' –

+0

Возможно, я ошибаюсь, но кажется, что ошибка говорит о том, что парсер нашел '' ', где он ожидал' [', и это было в начале ваш JSON-файл. Но на основе вашего кода и примера это выглядит неправильно. Не могли бы вы опубликовать правильную структуру и код JSON, которые позволят нам воспроизвести вашу проблему? Вам не нужно публиковать все объекты из массива, даже один или два должно быть достаточно. – Pshemo

ответ

0

Проблема заключается в том, что

getClass().getResource("../res/LandInfo.json").toExternalForm() 

возвращается Строка, представляющая расположение ресурса, а не содержание ресурса. Таким образом, вы пытаетесь разобрать строку, такую ​​как

file:/[your project location]/classes/res/LandInfo.json 

который, как вы видите, недействителен JSON, вызывающий ошибку.

Для решения этой проблемы вы можете использовать: fromJson(Reader json, Class<T> classOfT). Создайте поток, который будет отвечать за чтение данных из вашего json-файла, оберните его с помощью считывателя и передайте его методу fromJson.

Ваш код может выглядеть

InputStream in = getClass().getResourceAsStream("../res/LandInfo.json"); 
Land[] landInfo = new Gson().fromJson(new InputStreamReader(in, "UTF-8"), Land[].class); 
+0

Также '../ res/LandInfo.json' doesn Правильно. Этот путь зависит от местоположения класса от whi ch вы вызываете 'getClass()', поэтому, если вы попытаетесь использовать этот код в классе, например 'com.your.package', вам нужно будет добавить много' ../'. Лучше создать отдельный пакет/папку, добавить его в свой путь к классам (или в зависимости от пути построения IDE) и разместить там папку 'res'. Таким образом, вы можете получить доступ к папке 'res' через'/res', и все ее проблемы будут выполняться через '/ res/content'. – Pshemo

+0

Спасибо, что это работает :) –

Смежные вопросы