![](/img/trans.png)
[英]How to convert JSON string to a JAVA object when the structure is different
[英]How to convert json to java object if the json may have differenct structure
我想使用Java从URL读取返回值。 响应json可能是
{
token:"blablablabla",
expired: 7200
}
或形式:
{
errcode: 201
errmsg: "out of limited"
}
我目前使用jackson
将json转换为java对象。 但是在我的情况下,响应json可能有所不同。 我发现的所有示例和教程都只处理一种形式的json字符串。
我想知道处理这种情况的最佳实践。当前,我只是catch (JsonMappingException e)
然后再次尝试转换为其他类。
正确的答案是使响应带有清晰的标记,以指示要表示的类别。
否则,您将要么尝试随机尝试,要么想出另一种加载机制。
一种方法可能是将JSON读取到树或地图或其他带标签的数据结构中,然后使用反射来尝试找到其字段与JSON给定的字段名称相匹配的类……这将是非常痛苦且脆弱的解决问题的方法。
或者,您可以跳过后面的阶段,而仅使用抽象数据结构,就像XML用户使用文档对象模型一样。 当然,您将无法以这种方式访问特定对象上的任何方法,并且您仍然必须提出某种逻辑,以识别足够多的内容以对其进行有用的处理……但是它可以让您检查和处理那些内容,而不必事先知道返回了哪个对象。
据我了解, errcode
和errmsg
是常见的响应属性。 因此,您可能想创建一个抽象类或接口,例如JsonResponse
,该类或接口包含这些公共属性,并使所有响应类()继承JsonResponse
。 因此,在您的代码中,您可以首先通过检查这些属性来检查响应是否有错误。
例如
public abstract Class JsonResponse {
private String errcode;
private String errmsg;
//getters...
//setters...
}
和,
public class MyResponse extends JsonResponse {
private String token;
private String expired;
//getters...
//setters...
}
编辑:由艾伦(Allan)更正为“抽象类”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.