如何在java中将字符串Json转换为Json
我试图转换从spring启动应用程序查询postgres jsonb列得到的字符串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
[
"[\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"
}
]