2017-11-09 12 views
0

私はJsonのオブジェクトと配列を扱うのにかなり新しいので、まず用語の使用についてお詫びしたいと思います。JAVAのAPIから得られたJSON形式からデータを抽出する

私はJsonオブジェクトからデータを抽出することができるさまざまな例を検索しましたが、私の状況と似ていません。文字列「Plan A(Economy Plan)」、「Plan B (デラックスプラン)は、次のJSONから」、および 『プランC(ラマダン)』:

{ 
"status": "success", 
"data": { 
    "1:Plan A (Economy Plan)": [{ 
     "idscheme": "49", 
     "plan_name": "1", 
     "plan_id": "ABS-772", 
     "term": "8", 
     "payment": "1000", 
     "amount": "8000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }, { 
     "idscheme": "50", 
     "plan_name": "1", 
     "plan_id": "ABS-773", 
     "term": "8", 
     "payment": "2000", 
     "amount": "16000", 
     "expected_amount": null, 
     "added_by": "1", 
     "updated_on": "2017-09-28" 
    }, { 
     "idscheme": "48", 
     "plan_name": "1", 
     "plan_id": "ABS-762", 
     "term": "7", 
     "payment": "4000", 
     "amount": "28000", 
     "expected_amount": null, 
     "added_by": "1", 
     "updated_on": "2017-09-28" 
    }], 
    "2:Plan B (Deluxe Plan)": [{ 
     "idscheme": "33", 
     "plan_name": "2", 
     "plan_id": "ABS-486", 
     "term": "8", 
     "payment": "2000", 
     "amount": "16000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }, { 
     "idscheme": "47", 
     "plan_name": "2", 
     "plan_id": "ABS-831", 
     "term": "7", 
     "payment": "3000", 
     "amount": "21000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }, { 
     "idscheme": "46", 
     "plan_name": "2", 
     "plan_id": "ABS-776", 
     "term": "7", 
     "payment": "4000", 
     "amount": "28000", 
     "expected_amount": null, 
     "added_by": "2", 
     "updated_on": "2017-09-27" 
    }], 
    "5:Plan C (Ramadan)": [{ 
     "idscheme": "51", 
     "plan_name": "5", 
     "plan_id": "ABS-865", 
     "term": "7", 
     "payment": "3000", 
     "amount": "21000", 
     "expected_amount": null, 
     "added_by": "42", 
     "updated_on": "2017-10-15" 
    }, { 
     "idscheme": "52", 
     "plan_name": "5", 
     "plan_id": "ABS-389", 
     "term": "8", 
     "payment": "4000", 
     "amount": "32000", 
     "expected_amount": null, 
     "added_by": "42", 
     "updated_on": "2017-10-15" 
    }, { 
     "idscheme": "53", 
     "plan_name": "5", 
     "plan_id": "ABS-451", 
     "term": "8", 
     "payment": "5000", 
     "amount": "40000", 
     "expected_amount": null, 
     "added_by": "42", 
     "updated_on": "2017-10-15" 
    }] 
}, 
"plancount": 3 

}

は、アイデアは、このJSONオブジェクトは、APIの使用から作成されていることである、と私はしたいですさまざまな「計画」をAndroidのスピナーに動的に配置します。現在、私は値をスピナーにハードコーディングしていますが、その数のプランは変更可能で、毎回ハードコードしたくありません。

APIがこのような方法で構築されているため、Jsonオブジェクトのフォーマットは通常と少し異なりますが、APIを変更する代わりに別のプランを抽出する方法はありますか?以下は

は、私はこれを達成するために従っている手順です。

  1. 文字列APIUrl =「APIのURL」
  2. 私はAsyncTaskとを拡張するクラスのDataAPIに必要なデータとともにAPIUrlを送信していますHTTP POSTリクエストを送信します。
  3. ストリングJsonResultに格納されたサーバー応答。
  4. これで、文字列からjsonObjectを作成し、それをチェックしたかどうかを確認しましたjsonObject.getString("status").equals("success")
  5. 必要な文字列を抽出する方法があるかどうかわからないので、 「プランA(エコノミープラン)」「プランB(デラックスプラン)」「3:プランC(ラマダン) 、 "Plan C(Ramadan)")、Androidのスピナーに配置します。

ご協力いただき、ありがとうございました。私が投稿に含める必要がある変更や事柄をご希望の場合は、お知らせください。

Gson gson = new Gson(); 
YourPojoOfJson yourObjectOfPojo = gson.fromJson(jsonObject,YourPojoOfJson .class); 

をそして、あなたのJSONのPOJOに行く作るために:

+0

プランの数が変わることがあるので、そのjsonをpojoに変換できないので、私はあなたが 'Map'を使うべきだと思います。あなたの質問に似た例を見ることができます(https:// stackoverflow .com/questions/47188934/how-to-turn-this-json-response-into-pojo) – Signo

答えて

0

あなたはその目的のためにgson使用することができます http://www.jsonschema2pojo.org/

があなたのJSONをコピーし、右側のパネルとなしからJSONを選択します。 プレビューをクリックすると、いくつかのクラスが表示されます.Jsonのオブジェクトを作成するためにこれらのクラスをクリックします。クラスのオブジェクトを取得したら、オブジェクトを呼び出すだけでgetプロパティを使用することで、どこでも値を取得できます。

+0

それはあなたを助けてくれることを願っています。それがうまくいけば答えとしてこのポストをマークすることを忘れないでください:) –

0

非同期HTTP POST要求を送信して応答をpojoに変換するためにRetrofit(http://square.github.io/retrofit/)を使用できます。

例:

は、「データ」jsonArrayは、あなたがそうあなたが繰り返すことができますしたいものを達成するためにする必要があります

@FormUrlEncoded 
@POST("user/edit") 
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last); 
0

私はあなたに私の注意を教えてくれますので、コメントを書き込むための十分な評判を持っていません単純に "データ"はjsonObjectになり、この3つのプランがあり、それぞれのキーが分かっている必要があります。 「データ」JsonArray代わりにjsonObjectまたはこのAPIを与えた人に、変更を指示してください。

0

多くの方に感謝します。私はGson、Pojo、Retrofitなどの経験がないので、私がやったことを投稿したいと思います。うまくいけば、私はもっと深く掘り下げて、これらのことをする方法を学びます。とにかく、私はJsonオブジェクトを文字列に変換し、Patternコンパイラを使用して必要な文字列を抽出しました。次に、これらをPlanというArrayListに配置します。

String temp = jsonObject.getJSONObject("data").toString(); 

Pattern p = Pattern.compile("\"(.*?)\":\\["); 
Matcher m = p.matcher(temp); 

m.find(); 

plans.add(m.group(1)); 

p = Pattern.compile("],\"(.*?)\":\\["); 
m = p.matcher(temp); 

while (m.find()){ 

    plans.add(m.group(1)); 

} 

status = true; 

return plans; 

より多くの計画が、それは私がより良い方法を見つけ出すまで私がこだわってるの回避策ですので、追加する必要がなかった場合、これは完璧に動作します。

関連する問題