如何解析json arrary?

时间:2015-06-20 09:55:03

标签: json jackson spring-boot

我遇到了解析json数据的问题。我正在使用基于REST api的spring boot构建项目。当我必须解析对应域的数据时,这很容易,我在控制器方法中使用RequestBody和域名,但在当前的场景中,我有一个以json形式的域列表:

{
   "data":[
      {
         "type":"abc",
         "subtypes":[
            {
               "leftValue":"BEACH",
               "rightValue":"MOUNTAIN",
               "preferencePoint":60
            },
            {
               "leftValue":"ADVENTURE",
               "rightValue":"LEISURE",
               "preferencePoint":60
            }
         ]
      },
      {
         "type":"mno",
         "subtypes":[
            {
               "leftValue":"LUXURY",
               "rightValue":"FUNCTIONAL",
               "preferencePoint":60
            },
            {
               "leftValue":"SENSIBLE",
               "rightValue":"AGGRESIVE",
               "preferencePoint":0
            }
         ]
      }
   ]
}

我在列表中发送数据type是类Type的属性 和类类型包含Subtypes类的列表,子类类包含leftValuerightValueenums

我正在使用默认使用jackson liberary的spring boot,我想使用Type将这些数据解析为相应的Jackson类。任何人都可以为我提供解决方案。

1 个答案:

答案 0 :(得分:0)

如果你有静态或动态有效载荷,我不清楚。

静态有效负载

对于静态的,我个人会尝试简化你的有效载荷结构。但是你的结构看起来像这样。 (我跳过了getter和setter。你可以通过Lombok library生成它们。)

public class Subtype{
  private String leftValue;
  private String rightValue;
  private int preferencePoint;
}

public class Type{
  private String type;
  private List<Subtype> subtypes;
}

public class Data{
  private List<Type> data;
}

然后在您的控制器中,您将Data类型注入@RequestBody

动态有效负载

对于动态有效负载,可以选择LinkedHashMap<String, Object>作为@RequestBody。该映射中的值的类型为Object,可以将其转换为另一个LinkedHashMap<String, Object>,因此该方法也支持嵌套对象。这可以通过这种方式支持无限嵌套。唯一的缺点是您需要根据地图中的键将Object转换为正确的类型。

BTW,使用纯Spring或Spring Boot,我始终能够避免明确调用Jackson API,因此我不建议沿着这条路走下去。