Проблема при работе с gson

Рейтинг: 1Ответов: 1Опубликовано: 21.04.2015

Вижу, что на форуме неоднократно обсуждалась тема работы получения данных из json с помощью библиотеки gson , но решил спросить ещё раз.

Имеется json-структура следующего вида:

{
    "collection_rest_access":
 {
    "@COUNT":"1",
    "@START":"1",
    "@TOTAL_COUNT":"1",
    "rest_access":
  {
    "@id":"400001",
    "@REL_ATTR":"400001",
    "@COMMON_NAME":"538213764",
    "expiration_date":1430128973
  }
 }
}

Мне необходимо получить значение переменной expiration_date.

Создал следующие классы для получения данных:

public class CollectionAccess {
ArrayList<RestAccess> restaccess;

public void setAccess (ArrayList<RestAccess> rr) {
    restaccess = rr;
}


public ArrayList<RestAccess> getAccess () {
    return restaccess;
}

}

public class RestAccess {
String expiration_date;


public void setExpDate (String expdate){
    this.expiration_date = expdate;
}


public String getExpDate() {
    return this.expiration_date;
};
}

Вот вызов классов из программы:

        public static void main(String[] args) throws FileNotFoundException, IOException {
    // TODO code application logic here
    String fpath = "C:\\BPMINST\\json.txt";

    String json_str = "";
    BufferedReader bufferedReader = null;
    bufferedReader = new BufferedReader(new FileReader(fpath));
    String sCurrentLine;
    while ((sCurrentLine = bufferedReader.readLine()) != null) {
        json_str = json_str + sCurrentLine;
    }
    System.out.println(json_str);
    Gson gson = new Gson();
    CollectionAccess orderHeader = gson.fromJson(json_str, CollectionAccess.class);
    if (orderHeader==null){
        System.out.println("orderHeader is null");
        return;
    } else {
        System.out.println("orderHeader not  is null");
    };
    ArrayList<RestAccess> orderDetailList = orderHeader.getAccess();
    if (orderDetailList!=null){
         System.out.println(orderDetailList.size());
    };
}

но результат отработки возвращает null. Подскажите пожалуйста, что может быть не так с классами?

Ответы

▲ 1

Проблема, скорее всего, возникает из-за того, что типы данных совершенно не соответствуют тому, что содержится в JSON. Поле в первом объекте называется collection_rest_access, а в коде оно названо restaccess. Тип для него тоже задан неверно, в поле хранится объект, а тип поля в коде - почему-то коллекция.

Кроме того, я бы не стал использовать GSON в случаях, когда нужно достать одно поле, проще воспользоваться библиотекой JSON-Java.