【问题标题】:How to convert a JSON request into a list of specific format n spring?spring 如何将 JSON 请求转换为特定格式的列表?
【发布时间】:2022-02-03 21:15:47
【问题描述】:

我有一个这样的请求 JSON 列表:

[
 {
  Id: 0,
  values: [a, b, c, d]
 },
 {
  Id: 1,
  values: [1, 2, 3, 4]
 },
 .
 .
 .
]

如何将其转换为这样的列表:

[
 {
  Name: a,
  Count: 1
 },
 {
  Name: b,
  Count: 2
 }
 {
  Name: c,
  Count: 3
 }
 {
  Name: d,
  Count: 4
 }
]

我有一个由 name 和 count 属性组成的 dto 类。

【问题讨论】:

    标签: java spring spring-boot arraylist


    【解决方案1】:

    尝试在值列表上使用 zip 来创建包含每个元组的第 n 个元素的元组列表。

    【讨论】:

    • 我似乎无法在我的 Spring Boot Java 应用程序中使用 zip。可以举个例子吗?
    【解决方案2】:

    据我所知,您想要的结果是您的 DTO 类的列表。

    为此,您必须有一个像这样的 DTO 类:

    public class TestRequest {
        private String name;
        private Integer count;
    }
    

    原始 DTO 类的示例可能是:

    public class TestRequestDTO {
        private Integer id;
        private List<String> values;
    }
    

    结果将是您的 DTO 类的列表,如下所示:

            List<TestRequestDTO> dtoClassList = new ArrayList<>();
            List<TestRequest> toReturn = new ArrayList<>();
            
            for (int i = 0; i < dtoClassList.size(); i++) {
                for (int j = 0; j < dtoClassList.get(i).getValues().size(); j++) {
                    if (i+1 != dtoClassList.size()) {
                        toReturn.add(TestRequest.builder()
                                .name(dtoClassList.get(i).getValues().get(j))
                                .count(dtoClassList.get(i + 1).getValues().get(j))
                                .build());
                    }
                }
            }
    
    

    生成的请求如下:

    [
        {
            "name": "a",
            "count": 1
        },
        {
            "name": "b",
            "count": 2
        }
    ]
    

    【讨论】:

    • 是的,我想要一个我的 DTO 类的列表,并且我确实有一个上述结构的 DTO 类。但是,由于我有很长的值列表对象列表,我该如何使这个动态而不是为每个值列表元素做呢?
    • 上一个答案是您修改以适应您的问题的示例,但是我已将答案编辑为类似于您最初的问题。请注意,根据您在开始时提供的信息,我无法知道您设置的结构。最好的问候!
    • 非常感谢!这有助于解决我的问题。
    • 太好了!我很高兴听到这个消息。如果问题已得到解答,请关闭该问题,以便其他用户在遇到类似问题时也能从中受益。您可以在以下link 找到有关此的信息
    【解决方案3】:

    您的问题是根据位置使用原始 JSON 文件中两个不同集合的成员生成一个集合。如果您尝试用 Java 编写代码,代码会很长。

    在开源 Java 包 SPL 中很容易做到这一点。三行代码就够了:

    img

    SPL 提供 JDBC 驱动程序供 Java 调用。只需将上述 SPL 脚本存储为 convert.splx 并在调用存储过程时在 Java 中调用它:

    …
    Class.forName("com.esproc.jdbc.InternalDriver");
    con= DriverManager.getConnection("jdbc:esproc:local://");
    st = con.prepareCall("call convert()");
    st.execute();
    …
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多