java - 如何从Java中的JSON映射另一个对象中的对象数组
问题描述
我需要调用一个 APIRestTemplate
来获取应该自动转换为 Java 对象的 JSON。
示例 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)。
public class OCRResponse {
@JsonProperty("ParsedResults")
private List<ParsedResults> parsedResults;
@JsonProperty("OCRExitCode")
private String OCRExitCode;
@JsonProperty("IsErroredOnProcessing")
private boolean isErroredOnProcessing;
@JsonProperty("ProcessingTimeInMilliseconds")
private Long processingTimeInMilliseconds;
@JsonProperty("SearchablePDFURL")
private String searchablePDFURL;
}
上面的类包括一个由以下字段组成的对象集合,它应该表示一个 JSON 格式的数组。
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;
}
这个文件还有一个由我制作的类来映射我的 JSON 的另一部分,但我不知道它是否重要,所以除非有人需要,否则我不会粘贴它。
现在,问题是,如果我启动我的应用程序并进行调用,该OCRResponse
对象将拥有除对象之外的所有数据ParsedResults
。
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)
我试图改变List<ParsedResults> parsedResults
为
ArrayList<ParsedResults> parsedResults;
ArrayList<ParsedResults> parsedResults = new ArrayList<>();
ParsedResults[] parsedResults;
ParsedResults parsedResults //As I should get only one element in my collection anyway
但这些都不起作用,我经常得到NullPointerException
或IndexOutOfBoundsException
我很确定使用这种方法可以实现我的目标,因为如果我没记错的话,我在学习期间也做过类似的事情。有人可以帮我弄清楚这里出了什么问题吗?
解决方案
推荐阅读
- javascript - 如何在 Ajax 中调用此数据块?
- null - 从 Null 指针加载,为什么这不会使我的程序崩溃?
- google-apps-script - 仅当单元格显示“是”时才获取填充单元格的日期
- python - 如何使用数据集(nd.array)在散点图中对误差条(x 和 y)进行颜色映射?
- python - 将对象 ID 从模板传递到下一个模板的表单
- reactjs - setState 的演示?
- json - 从文件 bash 中获取特定的字符串行
- puppet - 木偶在上课后读取文件内容
- gcc - 名称为 1.0 的链接器选项 Windows
- python - sublime text 无法在python中获取环境变量