【问题标题】:How to parse json arrary?如何解析json数组?
【发布时间】:2015-09-06 07:01:02
【问题描述】:

我遇到了解析 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 类的列表,子类型类包含leftValuerightValue 作为enums

我正在使用默认使用 jackson 库的 Spring Boot,我想使用 Jackson 将此数据解析为相应的 Type 类。谁能给我解决方案。

【问题讨论】:

  • google 一下,添加你遇到的错误

标签: json jackson spring-boot


【解决方案1】:

我不清楚您是否有静态或动态有效负载。

静态负载

对于静态的,我个人会尝试简化您的有效负载结构。但是你的结构看起来像这样。 (我跳过了 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&lt;String, Object&gt; 注入为@RequestBody。该映射中的值是Object 类型,可以转换为另一个LinkedHashMap&lt;String, Object&gt;,因此这种方法也支持嵌套对象。这样可以支持无限嵌套。唯一的缺点是您需要根据地图中的键将Objects 转换为正确的类型。

顺便说一句,使用纯 Spring 或 Spring Boot,我总是能够避免显式调用 Jackson API,因此我不建议走这条路。

【讨论】:

  • 感谢回复@ikrnac 在子类型类 leftValue 和 rightValue 是枚举中,您可以说 SubtypEnums。我怎样才能解析这个动态有效载荷?
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 2015-09-15
  • 2012-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多