您使用什么技术来处理不同的JSON结构?

时间:2016-09-29 18:12:53

标签: json object type-conversion retrofit2 android gson

改装电话:

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

我需要从浏览器中重新启动json,如果返回User对象:

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

和json从浏览器中重新启动,如果返回错误:

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

1 个答案:

答案 0 :(得分:1)

关注http://wiki.workassis.com/android-retrofit-2-1-http-client/本教程并使用以下内容作为模型类

app.get('/api/products', function(req, res) {
    var query = {};
    if (typeof req.query !== 'undefined' && req.query) query = req.query; 

    Product.find(query).populate("images", "image").exec(callback);
});

并使用

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;
}