2016-09-29 80 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先生 –

相关问题