2016-05-09 2 views
-1

У меня есть json, как указано ниже.Динамический Json Parsing с использованием Gson Android

{ 
    "product": [ 
    { 
     "classification": "abc", 
     "ABC": [ 
     { 
      "classification": "abc", 
      "name": "abc new product one", 
      "price": "10775.0000", 
     }, 
     { 
      "classification": "abc", 
      "name": "abc new product two", 
      "price": "12725.0000", 
     } 
     ] 
    }, 
    { 
     "classification": "def", 
     "DEF": [ 
     { 
      "classification": "def", 
      "name": "def product one", 
      "price": "728.0000", 
     }, 
     { 
      "classification": "def", 
      "name": "def product two", 
      "price": "1263.0000", 
     }, 
     ] 
    } 
    ], 
    "status": "OK", 
    "message": "success" 
} 

В приведенном выше JSON, ключ в заглавной букве динамичен

(Ex: ABC, DEF)

. Я создал класс Pojo, как показано ниже:

public class ProductResponse{ 

     private String status; 
     private String message; 
     private List<Products>; 

     Getters And Setters 
    } 

    public class Products{ 

     private String classification; 

    } 

Я изо всех сил, чтобы написать следующую часть продуктов класса Pojo, как ключи, которые находятся в столицах

(Ex: ABC, DEF)

являются динамическими. Я использую библиотеку волейбола для получения данных и для синтаксического анализа. Я использую библиотеку gson. Пожалуйста, помогите мне.

+1

Существует плохой стандарт api. plz отредактируйте ваш web api согласно вашим требованиям ..... !!! –

+0

Использование JSONObject для извлечения содержимого списка ABC может быть обходным путем. По крайней мере, у вас есть ключ от бэкэнда, даже если он динамичен. Затем вы можете разобрать строку json в ArrayList <> – asozcan

+0

, так как в этом случае прямая передача json объекту, конечно, может быть другим решением. до сих пор вы можете получить ABC, DEF, которые являются динамическими по индексу, используя цикл для итерации и чтения json. –

ответ

0

У вас не может быть динамического имени. причина в том, что имя в вашем json должно быть связано с атрибутом вашего объекта. Я рекомендую вам добавить атрибут «классификации» в вашем JSON и модели следующим образом:

{ 
    "type": "def", 
    " results": [ 
    { 
     "name": "def product one", 
     "price": "728.0000", 
    }, 
    { 
     "name": "def product two", 
     "price": "1263.0000", 
    }, 
    ] 
} 



public final class ProductResponse{ 

     private String status; 
     private String message; 
     private List<Products> product = new Arraylist<>(); 

     // Getters And Setters 
    } 

    public final class Products{ 

     private String type; // type of product // ABC or DEF 
     private List<Result> results = new Arraylist<>(); 

     // Getters And Setters 
    } 


    public final class Result{ 

     private String name; 
     private String price; 


    // Getters And Setters 
    } 

Ваши продукты класс имеет теперь список результатов, связанных с классификацией!

Надеюсь, это поможет!

+0

Если вы наблюдаете в моем json, есть два типа продуктов. Один из них - «ABC», а другой - «DEF». Я использовал его только для выделения цели. – user2511004

+0

Привет, я обновил фрагмент. Тип должен быть определен. См. Выше. – GuillaumeAgis

+0

@ user2511004 вы довольны моим ответом? Если да, пожалуйста, поддержите мой ответ! спасибо :) – GuillaumeAgis

0

Ваша проблема в динамическом ключе, который я нашел, не является динамическим. Как я вижу, для каждого элемента массива product значение ключа classification является следующим ключом. Только разница в том, что они заглавными буквами.

{ 
    "classification": "def", 
    "DEF": [ 
    { 
     "classification": "def", 
     "name": "def product one", 
     "price": "728.0000", 
    }, 
    { 
     "classification": "def", 
     "name": "def product two", 
     "price": "1263.0000", 
    }, 
    ] 
} 

Как и здесь "classification": "def" и следующий ключ DEF. То, что я хотел бы сделать здесь, это получить значение classification key, заглавные буквы всех строк в строке, а затем использовать его как key.

+0

Я использовал его только для выделения цели. На самом деле это маленькое письмо. Не могли бы вы рассказать мне, как я могу получить значение «классификация» в классе pojo, как вы сказали. – user2511004

+0

Вы можете установить значение в конструкторе. Разбирайте значения и передавайте их при создании объекта класса pojo. –

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