2016-09-29 83 views
0

改造電話:你使用什麼技術來處理不同的JSON結構?

@GET("getUser") 
    Call<Map<Object,Object>> getUser(@Query("phoneNumber") String phoneNumber, @Query("hash") String hash) 

我需要從瀏覽器的JSON resut,如果回報用戶對象:從瀏覽器

{"error":"0","value":[{"id":1,"name":"","phoneNumber":"87472335578","smsCode":497797,"smsCodeDate":1475160867,"hash":"76dcc911e14f997189243f3370080e62","roles":[{"id":2,"name":"ROLE_USER"}]}]} 

和JSON resut,如果返回錯誤:

{"error":"-1"} 

回調響應在android中

enter image description here

對於此問題 我使用Map<Object,Object>來處理不同的JSON結構。但問題在於編號。我需要int或long,而java將它視爲double值。我可以使用一些解析方法。但是,如果Map中有很多變量,那將是非常糟糕的工作。

我不能使用Map<String,String>然後解析它,因爲Gson不想處理它。有反斜槓。當然,刪除它們是顯而易見的,但我希望找到用JSON處理的優雅方式。

JSON生成的代碼在服務器

public final static String SUCCESS = "0"; 
public final static String NOT_FOUND = "-1"; 

Map<Object, Object> m = new HashMap<>(); 

@RequestMapping("/getUser") 
    Map<Object, Object> getUser(@RequestParam(value = "phoneNumber", defaultValue = "") String phoneNumber, 
      @RequestParam(value = "hash", defaultValue = "") String hash) { 

     m.clear(); 

     User user = userRepository.findByPhoneNumberAndHash(phoneNumber, hash); 
     if (user != null) { 
      m.put(ERROR_JSON, SUCCESS); 
      m.put(VALUE_JSON, String.valueOf(user)); 
     } else { 
      m.put(ERROR_JSON, NOT_FOUND); 
     } 
     return m; 
    } 

以上方法返回該JSON:

{"error":"0","value":[{\"id\":\"1\",\"name\":\"\",\"phoneNumber\":\"87472335578\",\"smsCode\":497797,\"smsCodeDate\":1475160867,\"hash\":\"76dcc911e14f997189243f3370080e62\",\"roles\":[{\"id":2,\"name\":\"ROLE_USER\"}]}]} 

original post

+0

檢查本教程http://wiki.workassis.com/android-retrofit-2-1-http-client/ –

回答

1

關注http://wiki.workassis.com/android-retrofit-2-1-http-client/本教程和使用以下內容作爲模型類

class Result{ 
    String error; 
    List<Value> value; 
} 

class Value{ 
    int id; 
    String name; 
    String phoneNumber; 
    String smsCode; 
    Long smsCodeDate; 
    String hash; 
    List<Roles> roles; 

} 

class Roles{ 
    int id; 
    String name; 
} 

,並使用

@GET("getUser") 
Call<Result>getUser(@Query("phoneNumber") String phoneNumber, @Query("hash") String hash) 
+0

我在客戶端做這個,但這種方式離開。我用的不是輸入List 。有了這個答案,我有一個想法,以同樣的方式來服務器端。這是顯而易見的))但是這個想法只是現在。謝謝@Bikesh M Annur先生 –

相關問題