2017-09-27 8 views
0

Retrofit2内側のjsonを持つマップjsonボディを使用してPOSTをどのようにしますか。ボディにマップを追加する方法 - 内側のjsonオブジェクトを持つマップを投稿する方法

{ 
    "id_invoice": 1234, 
    "action": "viewed", 
    "data": { 
     "id_object": 88, 
     "id_store": 43, 
     "type": "payment" 
    } 
} 

「データ」JSONオブジェクトが内部JSONを持つことに注目してください。どのように私はマップにこのすべてを置くことができ、私は、次のサービスのエンドポイントを使用して改造することを送ることができます。

public interface Api { 
    @NonNull 
    @POST("cart/payment") 
    @Headers({"Content-Type:application/json"}) 
    Observable<ResponseBody> postPaymentEvent(@Body Map<String, Object> body); 
} 

私は次のことを試してみました:

Map<String, Object> map = new HashMap<>(); 
JSONObject json = new JSONObject(); 
json.put("id_object", 88); 
json.put("id_store", 43); 
json.put("type", "payment"); 
map.put("action", "view"); 
map.put("id_invoice", 1234); 
map.put("data", json); //this is wrong. it creates the following response with a nameValuePairs field, which is not what i want: 

ボディ:

{ 
    "action": "page_view", 
    "id_invoice": "1234", 
    "data": { 
     "nameValuePairs": { 
      "id_object": 88, 
      "id_store": 43, 
      "type": "view" 
     } 
    } 
} 

答えて

0

これを実行します。

JSONObject dataJson = new JSONObject(); 
      try { 
       JSONObject parentJson = new JSONObject(); 

       dataJson.accumulate("id_object", 88); 
       dataJson.accumulate("id_store", 43); 
       dataJson.accumulate("type", "payment"); 


       parentJson.accumulate("id_invoice",1234); 
       parentJson.accumulate("action","viewed"); 
       parentJson.put("data",dataJson); 



       Log.d("Main Screen ",parentJson.toString()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

これは、この生成されます。私はハッシュマップ内でそれを必要と

{ 
    "id_invoice": 1234, 
    "action": "viewed", 
    "data": { 
    "id_object": 88, 
    "id_store": 43, 
    "type": "payment" 
    } 
} 
+0

を。 – j2emanue

+0

ハッシュマップに他のものを追加していますか? –

+0

いいえ、私はちょうどマップにそのjsonを置く必要があります。明らかに私はクラスとgsonを使用することができます。しかし、地図で試していた – j2emanue

関連する問題