2016-05-09 10 views
-1

私は以下のようにjsonを持っています。上記JSONで Gson Androidを使用した動的Json解析

{ 
    "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" 
} 

は、大文字でキーが動的である

(例: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クラスの次の部分を書くのに苦労してるの

(例:ABC、DEF)

は動的です。私はデータを取得するためにvolleyライブラリを使用しています。私はgsonライブラリを使用しています。私を助けてください。

+1

apiの標準が不良です。 plzあなたのrequirments .....に応じてあなたのWeb APIを編集する! –

+0

ABCのリスト内容を取得するためにJSONObjectを使用すると、回避策になる可能性があります。少なくとも、動的であっても、バックエンドからの鍵があること。次に、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で観察すると、2種類の製品があります。 1つは「ABC」で、他の1つは「DEF」です。私は目的を強調するためにそれを大文字にしました。 – user2511004

+0

こんにちは、スニペットを更新しました。型を定義する必要があります。上記をご覧ください。 – GuillaumeAgis

+0

@ user2511004あなたは私の答えに満足していますか?はいの場合は、私の答えをupvoteしてください!ありがとう:) – 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として使用します。

+0

私はハイライト目的のために大文字にしました。実際は小文字です。あなたが言ったように、pojoクラスの "classification"値を取得する方法を教えてください。 – user2511004

+0

コンストラクタで値を設定できます。値を解析し、pojoクラスのオブジェクトを作成しながら渡します。 –

関連する問題