【问题标题】:Parsing JSON in Spring boot application [duplicate]在 Spring Boot 应用程序中解析 JSON [重复]
【发布时间】:2019-09-08 20:54:52
【问题描述】:

我在想出一种解析这种 JSON 的方法时遇到了麻烦。在我的应用程序中获得此响应后,我需要能够分别访问数据和消息。

{
    "data": [
        {
            "email": "eskaferas@gmail.com",
            "firstName": "Seras",
            "lastName": "Meras"
        },
        {
            "email": "Soras@gmail.com",
            "firstName": "Oras",
            "lastName": "Moras"
        },
        {
            "email": "bzbzb@gmail.com",
            "firstName": "hello",
            "lastName": "bye"
        },
        {
            "email": "lrc@gmail.com",
            "firstName": "Seras",
            "lastName": "Meras"
        }
    ],
    "message": "Success"
}

谁能推荐一种专门针对 Spring Boot 的方法?或者是 Spring boot 中用来解析这种 JSON 的常用方式。

谢谢。

编辑

我的主要问题是 Spring Boot 可以使用什么工具,如果我使用 Jackson,我的 POJO 类会是什么样子。会是这样吗?:

public class testPojo {
  Users[] users;
  String message;
}

【问题讨论】:

  • 到目前为止你能分享你的代码吗?
  • 你有没有尝试过?你看过Spring官网提供的任何文档或示例吗?
  • 请在 Google 中写下“如何解析 JSON java”。
  • 如果你想让别人为你做这件事,那么你应该学会解决自己的问题。这可以通过简单的谷歌搜索快速解决。
  • @Dimitris 好的,谢谢,如果我遇到特定代码的任何问题,我会回来。

标签: java json spring spring-boot


【解决方案1】:

Pojo 类将如下所示:

public class TestPojo{

    private Users[] data;
    private String message;

    public Users[] getData() {
        return data;
    }

    public void setData(Users[] data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
     }
}

class Users {
    private String email;
    private String firstName;
    private String lastName;
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

在控制器的方法参数中使用@RequestBody。

@RestController
class AbcController{

    PostMapping("/api")
    public String create(@RequestBody TestPojo test){
    // you can acess your json in test object
    return "done"
    } 
}

【讨论】:

  • 谢谢。现在有点清楚了。
  • 如果您在实施时发现任何问题,请告诉我。
  • 你好。只是想问一下,如果在数据之后有 { } 而不是 [] 并且只有一个用户在该数据中,那么 pojo 会是什么样子。从那以后我很困惑,连续打开两个 {。如果需要,我可以编辑我的问题以使其更清晰。
  • 好的,非常感谢!
  • 哦,对不起,json毕竟不是那样的。它开始{“数据”{ {“电子邮件”......这就是我在努力解决的问题。我正在投票,但由于声誉仍然很低,因此没有记录选票。我会在一分钟内添加 json。
【解决方案2】:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.fasterxml.jackson.databind.SerializationFeature;
import lombok.Getter;
import lombok.Setter;
import org.junit.Test;
import org.springframework.context.annotation.Bean;

import java.io.IOException;
import java.util.List;

public class TestJUnit {

    @Test
    public void exec() {
       String json = "{" +
               "    \"data\": [" +
               "        {" +
               "            \"email\": \"eskaferas@gmail.com\"," +
               "            \"firstName\": \"Seras\"," +
               "            \"lastName\": \"Meras\"" +
               "        }," +
               "        {" +
               "            \"email\": \"Soras@gmail.com\"," +
               "            \"firstName\": \"Oras\"," +
               "            \"lastName\": \"Moras\"" +
               "        }," +
               "        {" +
               "            \"email\": \"bzbzb@gmail.com\"," +
               "            \"firstName\": \"hello\"," +
               "            \"lastName\": \"bye\"" +
               "        }," +
               "        {" +
               "            \"email\": \"lrc@gmail.com\"," +
               "            \"firstName\": \"Seras\"," +
               "            \"lastName\": \"Meras\"" +
               "        }" +
               "    ]," +
               "    \"message\": \"Success\"" +
               "}".replaceAll(" ", "");

        ObjectMapper mapper = new ObjectMapper();

        try {
            JsonParser parser = mapper.readValue(json, JsonParser.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Getter
    @Setter
    private static class JsonParser {
        private List<Data> data;
        private String message;
    }

    @Getter
    @Setter
    private static class Data{
        private String email;
        private String firstName;
        private String lastName;
    }

//    @Configuration
    private static class Configuration{
    @Bean
    public ObjectMapper objectMapper(){
        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        mapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
        mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
        mapper.setVisibility(mapper.getSerializationConfig()
                .getDefaultVisibilityChecker().withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
        mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
        mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
        return mapper;
    }
    }
}

【讨论】:

猜你喜欢
  • 2021-03-31
  • 1970-01-01
  • 2014-06-16
  • 2012-03-09
  • 2016-07-16
  • 2019-07-25
  • 2016-01-22
  • 2018-06-29
  • 2019-05-12
相关资源
最近更新 更多