如何从Java中的JSON映射另一个对象中的对象数组
我需要使用如何从Java中的JSON映射另一个对象中的对象数组,java,json,spring,mapping,resttemplate,Java,Json,Spring,Mapping,Resttemplate,我需要使用restemplate调用一个API,以获得一个JSON,该JSON应该自动转换为Java对象 示例JSON如下所示 { "ParsedResults": [ { "TextOverlay": { "Lines": [], "HasOverlay": false,
restemplate
调用一个API,以获得一个JSON,该JSON应该自动转换为Java对象
示例JSON如下所示
{
"ParsedResults": [
{
"TextOverlay": {
"Lines": [],
"HasOverlay": false,
"Message": "Text overlay is not provided as it is not requested"
},
"TextOrientation": "0",
"FileParseExitCode": 1,
"ParsedText": "Translated message",
"ErrorMessage": "",
"ErrorDetails": ""
}
],
"OCRExitCode": 1,
"IsErroredOnProcessing": false,
"ProcessingTimeInMilliseconds": "1296",
"SearchablePDFURL": "Searchable PDF not generated as it was not requested."
}
我还创建了一个类,用于在调用所需的API时映射所有数据(为了清晰起见,未包括getter和setter)
这个文件还有一个由我创建的类来映射JSON的另一部分,但我不知道这是否重要,所以除非有人需要,否则我不会粘贴它
现在的问题是,如果我启动应用程序并进行调用,OCRResponse
对象拥有除ParsedResults
对象之外的所有数据
我已尝试将列表解析结果更改为
ArrayList<ParsedResults> parsedResults;
ArrayList<ParsedResults> parsedResults = new ArrayList<>();
ParsedResults[] parsedResults;
ParsedResults parsedResults //As I should get only one element in my collection anyway
arraylistparsedresults;
ArrayList parsedResults=新的ArrayList();
ParsedResults[]ParsedResults;
ParsedResults ParsedResults//因为我应该在我的集合中只得到一个元素
但是这些都不起作用,我经常得到NullPointerException
或IndexOutOfBoundsException
我很确定用这种方法可以达到我的目标,因为如果我没记错的话,我在学习期间也做过类似的事情。
有人能帮我找出这里出了什么问题吗?FYI:根据示例JSON,OCRExitCode
应该是int
,processingtimeinmilyses
应该是String
,而FileParseExitCode
应该是int
尽管字段名称为ParsedResults
(复数),但类型应为List
(单数),因为List
使其成为复数。与列出汽车相同
是有意义的,即它是一个单独汽车的列表。谢谢提示:)。我没有意识到,在JSON中,ParsedResults
是复数,因为它是一个列表
/数组
,我会修正它。仅供参考:根据示例JSON,OCRExitCode
应该是int
,processingtimeinms
应该是字符串
,而FileParseExitCode
应该是int
——尽管字段名称为ParsedResults
(复数),但类型应为List
(单数),因为List
使其成为复数。与列出汽车相同
是有意义的,即它是一个单独汽车的列表。谢谢提示:)。我没有意识到,在JSON中,parsedResult
是复数,因为它是一个列表
/数组
,我会修复它。
public class ParsedResults {
@JsonProperty("TextOverlay")
private TextOverlay textOverlay;
@JsonProperty("TextOrientation")
private String textOrientation;
@JsonProperty("FileParseExitCode")
private String fileParseExitCode;
@JsonProperty("ParsedText")
private String parsedText;
@JsonProperty("ErrorMessage")
private String errorMessage;
@JsonProperty("ErrorDetails")
private String errorDetails;
}
OCRResponse response = restTemplate.getForEntity(uriBuilder.toUriString(), OCRResponse.class).getBody();
System.out.println(response.getSearchablePDFURL()); //null (correct)
System.out.println(response.isErroredOnProcessing()); //true (correct)
System.out.println(response.getProcessingTimeInMilliseconds()); //406 (correct)
System.out.println(response.getOCRExitCode()); //99 (correct)
System.out.println(response.getParsedResults()); //null (invalid result)
ArrayList<ParsedResults> parsedResults;
ArrayList<ParsedResults> parsedResults = new ArrayList<>();
ParsedResults[] parsedResults;
ParsedResults parsedResults //As I should get only one element in my collection anyway