Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中将字符串Json转换为Json_Java_Json_Spring Boot_Jpa - Fatal编程技术网

如何在java中将字符串Json转换为Json

如何在java中将字符串Json转换为Json,java,json,spring-boot,jpa,Java,Json,Spring Boot,Jpa,我试图转换从spring启动应用程序查询postgres jsonb列得到的字符串Json结果 下面是我得到的结果 [ "[\n {\n \"exam\": 50.0,\n \"grade\": \"A\",\n \"total\": 79.0,\n \"position\": \"First\",\n \"student_id\": \"89f36efe-1f36-48dc-92b

我试图转换从spring启动应用程序查询postgres jsonb列得到的字符串Json结果

下面是我得到的结果

  [
     "[\n    {\n        \"exam\": 50.0,\n        \"grade\": \"A\",\n        
     \"total\": 79.0,\n        \"position\": \"First\",\n        
     \"student_id\": \"89f36efe-1f36-48dc-92bc-c33df2784144\",\n        
     \"assessment_1\": 9.0,\n        \"assessment_2\": 17.0,\n        
     \"assessment_3\": 5.0,\n        \"student_name\": \"Anana 
     Aristotle\"\n    },\n    {\n        \"exam\": 50.0,\n        
     \"grade\": \"A\",\n        \"total\": 79.0,\n        
     \"position\": \"First\",\n        \"student_id\": \"89f36efe- 
     1f36-48dc-92bc-c33df2784144\",\n        \"assessment_1\": 
     9.0,\n        \"assessment_2\": 17.0,\n        
     \"assessment_3\": 5.0,\n        \"student_name\": \"Anana 
     Aristotle\"\n    },\n    {\n        \"exam\": 50.0,\n        
     \"grade\": \"A\",\n        \"total\": 79.0,\n        
     \"position\": \"First\",\n        \"student_id\": \"89f36efe- 
     1f36-48dc-92bc-c33df2784144\",\n        \"assessment_1\": 
     9.0,\n        \"assessment_2\": 17.0,\n        
    \"assessment_3\": 5.0,\n        \"student_name\": \"Anana 
    Aristotle\"\n    },\n    {\n        \"exam\": 50.0,\n        
    \"grade\": \"A\",\n        \"total\": 79.0,\n        
    \"position\": \"First\",\n        \"student_id\": \"89f36efe- 
    1f36-48dc-92bc-c33df2784144\",\n        \"assessment_1\": 9.0,\n        
    \"assessment_2\": 17.0,\n        \"assessment_3\": 5.0,\n        
    \"student_name\": \"Anana Aristotle\"\n    }\n]"
  ]
在返回结果之前,我已尝试在我的服务中执行此操作,但我仍然可以获得预期的结果:

    public List<?> getStudentAssessments(){
    List<?> assessments = 
       assessmentRepository.getStudentAssessments();
       Gson gson = new Gson();

       return  Collections.singletonList(gson.toJson(assessments));
    }
[
   {"exam": 50.0, "grade": "A", "total": 79.0, "position": "First", 
   "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144"}, 
   {"exam": 50.0, "grade": "A", "total": 79.0, "position": "First", 
   "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144"},
]

没有新行。

我的建议是使用Jackson

以下是我将如何做到这一点:

1) 创建数据传输对象

2) 写反序列化逻辑

private final ObjectMapper mapper=new ObjectMapper();
公共列表getStudentAssessments(){
列出评估=
assessmentRepository.getStudentAssessments();
returnassessments.stream()
.map(a->readAssessment(a))
.collect(Collectors.toList());
}
私有对象重新评估(对象a){
试一试{
返回mapper.readValue(a.toString(),newTypeReference(){});
}捕获(JSONParsee异常){
e、 printStackTrace();
}捕获(JsonMappingException e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
返回null;
}

您有一个Java字符串中的JSON文本,该字符串以
[
开头,具有字符串文字:

[ "..." ]
因此,将其作为JSON解析为
字符串[]
列表

在本例中,数组中有1个值,因此获取它。该字符串值是另一个JSON文本:

[
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1": 9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    },
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1":9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    },
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1":9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    },
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1": 9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    }
]
假设您有一个与这些对象匹配的
StudentAssessment
类,将其解析为
StudentAssessment[]
列表


简而言之,您需要调用JSON解析器两次

您可以轻松地从JSON字符串到Java对象使用Jackson框架。
[
   {"exam": 50.0, "grade": "A", "total": 79.0, "position": "First", 
   "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144"}, 
   {"exam": 50.0, "grade": "A", "total": 79.0, "position": "First", 
   "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144"},
]
public class AssessmentDto {
    private Double exam;
    private String grade;
    private Double total;
    private String position;

    @JsonProperty("student_id")
    private UUID studentId;

    // Getter & Setters omitted for brevity
}
private final ObjectMapper mapper = new ObjectMapper();

public List<?> getStudentAssessments(){
    List<?> assessments =
            assessmentRepository.getStudentAssessments();


    return  assessments.stream()
            .map(a -> readAssessment(a))
            .collect(Collectors.toList());
}

private Object readAssessment(Object a) {
    try {
        return mapper.readValue(a.toString(), new TypeReference<List<AssessmentDto>>() {});
    } catch (JsonParseException e) {
        e.printStackTrace();
    } catch (JsonMappingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}
[ "..." ]
[
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1": 9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    },
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1":9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    },
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1":9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    },
    {
        "exam": 50.0,
        "grade": "A",
        "total": 79.0,
        "position": "First",
        "student_id": "89f36efe-1f36-48dc-92bc-c33df2784144",
        "assessment_1": 9.0,
        "assessment_2": 17.0,
        "assessment_3": 5.0,
        "student_name": "Anana Aristotle"
    }
]