如果json可能具有不同的结构,如何将json转换为java对象
我想使用java从url中读取返回值。响应可能是json如果json可能具有不同的结构,如何将json转换为java对象,java,json,jackson,Java,Json,Jackson,我想使用java从url中读取返回值。响应可能是json { token:"blablablabla", expired: 7200 } 或采用以下形式: { errcode: 201 errmsg: "out of limited" } 我目前使用jackson将json转换为java对象。但在我的情况下,json的响应可能会有所不同。我发现的所有示例和教程都只处理一种形式的json字符串 我想知道处理这种情况的最佳实践是什么。目前,我只捕获JsonMappin
{
token:"blablablabla",
expired: 7200
}
或采用以下形式:
{
errcode: 201
errmsg: "out of limited"
}
我目前使用jackson将json转换为java对象。但在我的情况下,json的响应可能会有所不同。我发现的所有示例和教程都只处理一种形式的json字符串
我想知道处理这种情况的最佳实践是什么。目前,我只捕获JsonMappingException e并再次尝试转换为其他类。正确的答案是响应带有一个清晰的标记,指示它要表示的类 如果没有这些,您将陷入要么随机尝试,要么想出另一种加载机制的困境 一种方法可能是将JSON读入树、映射或其他标记的数据结构,然后使用反射来尝试查找一个类,该类的字段与JSON给定的字段名匹配。。。这将是处理问题的一种相当痛苦和脆弱的方式 或者您可以跳过后一阶段,只处理抽象数据结构,就像XML用户处理文档对象模型一样。当然,通过这种方式,您将无法访问特定对象上的任何方法,而且您还必须想出某种逻辑,识别足够的内容来使用它做一些有用的事情。。。但它可以让您检查和操作这些内容,而不必事先知道返回了哪个对象 据我所知,errcode和errmsg是常见的响应属性。因此,您可能希望创建一个抽象类或接口,比如JsonResponse,它保存这些公共属性,并让所有响应类继承JsonResponse。因此,在代码中,您可以首先通过检查这些属性来检查响应是否有错误 例如 以及 编辑:
改为Allan更正的“抽象类”。我发现我的问题与此非常相似。可能这个问题没有令人满意的答案。感谢您添加详细的代码片段。这是一个很好的解决办法。我认为像java这样的静态类型语言可能很难处理这种灵活的表示。是的,对于任何此类“绑定/映射”需求json、jaxb、jpa等,我们必须确定对象中的“所有可能属性”,并尝试派生接口/抽象类来保存公共属性[P.S.如果你觉得这很有用,你可能会想‘接受’我的答案。)我知道如何使用stackoverflow:我只是仍然在期待一个更好的解决方案。谢谢,伙计!我相信你会的,我只是在履行我的职责。没有义务:干杯!顺便说一句,我认为我们应该使用公共抽象类而不是公共接口
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...
}