繁体   English   中英

如果json可能具有不同的结构,如何将json转换为java对象

[英]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用户使用文档对象模型一样。 当然,您将无法以这种方式访问​​特定对象上的任何方法,并且您仍然必须提出某种逻辑,以识别足够多的内容以对其进行有用的处理……但是它可以让您检查和处理那些内容,而不必事先知道返回了哪个对象。

据我了解, errcodeerrmsg是常见的响应属性。 因此,您可能想创建一个抽象类或接口,例如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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM