【问题标题】:Convert two type of json to the same object将两种类型的json转换为同一个对象
【发布时间】:2015-03-04 11:47:18
【问题描述】:

我正在为返回 json 的 Web 服务 api 编写框架。我使用 Jackson 库来反序列化 json 字符串。 api 返回一个属性以继续获取请求的结果。回复如下:

{
    continueToken:"token",
    results: [ 
                {
                },
             ]
}

所有响应都具有这种结构。唯一的问题是 continue 属性的名称因请求而异。名字是这样的

prefix + "continue"

我只想创建一个类并且能够将 json 映射到这个类。我怎样才能做到这一点?这是我想要的:

public class Response {
    private String continueToken;
    private List<Article> results;

    public Response (String continueToken, Article[] articles) {
         this.continueToken = continueToken;
         this.results = Arrays.asList(articles);
    }
}
//Here the name is ttcontinue
String json = request.get(type1);
Response r = jsonToResponse(json);

//Here the name is llcontinue
json = request.get(type2);
r = jsonToResponse(json);

【问题讨论】:

  • 您的问题令人困惑。所以所有响应都有 continueToken 变量,但是请求有不同的变量名来传递 continueToken ?您不能从响应中获取令牌并将其传递到请求中的正确变量然后序列化为 json 吗?

标签: java json jackson


【解决方案1】:

hm.. 你有一个动态的字段名称,注释解决方案不起作用。假设没有其他以“继续”结尾的 JSON 字段(在您的示例中成立),您可以按照以下步骤操作:

  1. this post 一样遍历 JSON 键
  2. 使用field.getKey().endsWith("continue") 找到您想要的密钥
  3. 使用 this post 中的代码将 JSON 节点中的密钥替换为 "continueToken"
  4. 现在获取您的 Response 对象

【讨论】:

    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多