使用SpringJava将JSON属性映射到整数
我有很多JSON文件,格式如下。我想将名为计时的一个属性映射到整数 test.json使用SpringJava将JSON属性映射到整数,java,json,spring,jackson,Java,Json,Spring,Jackson,我有很多JSON文件,格式如下。我想将名为计时的一个属性映射到整数 test.json "Rating": { "ratingValue": "4.636365", "bestRating": "5", "worstRating": "1", "ratingCount": "66" }, "Timings": { "cookTime": "PT1H", "prepTime": "PT10M", "totalTime": "PT1H10M" } 我想在映射后将输
"Rating": {
"ratingValue": "4.636365",
"bestRating": "5",
"worstRating": "1",
"ratingCount": "66"
},
"Timings": {
"cookTime": "PT1H",
"prepTime": "PT10M",
"totalTime": "PT1H10M"
}
我想在映射后将输出存储在另一个JSON文件中。比如说,计时中的总时间为1H10M,那么我们将其指定为“总时间:7”。如果是“30M”,我们可以将其指定为“总时间:3”。我想用java来做这件事
所需输出
"Rating":
{
"ratingValue": "4.636365",
},
"Timings":
{
"totalTime": "7"
}
根据您的目标,您可以使用任何库来解析Json数据 例如org.json是一个不错的选择,下面是一个例子:
JSONObject object = new JSONObject(stringData);
String time = object.getJSONObject("Timings").getString("cookTime");
通过这种方式,您可以解析每个Json数据,然后再进行业务处理
您还可以使用gson或其他工具将数据映射到类。我尝试了以下方法:
class Timings {
private String cookTime;
private String prepTime;
private String totalTime;
public String getCookTime() {
return cookTime;
}
public void setCookTime(String cookTime) {
this.cookTime = cookTime;
}
public String getPrepTime() {
return prepTime;
}
public void setPrepTime(String prepTime) {
this.prepTime = prepTime;
}
public String getTotalTime() {
return totalTime;
}
public void setTotalTime(String totalTime) {
this.totalTime = totalTime;
}
@Override
public String toString() {
return "Timings [cookTime=" + cookTime + ", prepTime=" + prepTime + ", totalTime=" + totalTime + "]";
}
}
public class Test {
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
Timings obj = mapper.readValue(new File("C:\\Users\\Anish\\Desktop\\abc.json"), Timings.class);
String totalTime = obj.getTotalTime().split("PT")[1];
int total = 0;
if (totalTime != null && !totalTime.isEmpty()) {
total = returnTotalTime(totalTime);
}
ObjectNode mainNode = mapper.createObjectNode();
ObjectNode timingNode = mapper.createObjectNode();
childNode.put("totalTime", (total > 9) ? (total / 10) : total);
mainNode.set("Timings", timingNode);
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(mainNode);
System.out.println(json);
}
private static int returnTotalTime(String totalTime) {
if (totalTime != null && !totalTime.isEmpty()) {
String[] timeValues = totalTime.split("H");
if (timeValues.length == 0) {
return 0;
} else if (timeValues.length < 2) {
if (timeValues[0].contains("M")) {
return (timeValues[0].split("M").length <= 0) ? 0
: timeValues[0].split("M")[0].isEmpty() ? 0 : Integer.parseInt(timeValues[0].split("M")[0]);
}
return timeValues[0].isEmpty() ? 0 : Integer.parseInt(timeValues[0]) * 60;
}
int hour = timeValues[0].isEmpty() ? 0 : Integer.parseInt(timeValues[0]) * 60;
int mins = (timeValues[1].split("M").length <= 0) ? 0
: timeValues[1].split("M")[0].isEmpty() ? 0 : Integer.parseInt(timeValues[1].split("M")[0]);
return (hour + mins);
}
return 0;
}
输出:
{
"Timings" : {
"totalTime" : "7"
}
}
{
"Timings" : {
"totalTime" : "3"
}
}
{
"Timings" : {
"totalTime" : "2"
}
}
当“总时间”:“PT30M”
时,则:
输出:
{
"Timings" : {
"totalTime" : "7"
}
}
{
"Timings" : {
"totalTime" : "3"
}
}
{
"Timings" : {
"totalTime" : "2"
}
}
当“totalTime”:“PT23M”
时,则:
输出:
{
"Timings" : {
"totalTime" : "7"
}
}
{
"Timings" : {
"totalTime" : "3"
}
}
{
"Timings" : {
"totalTime" : "2"
}
}
如何将其映射到整数?在何处进行查找以将其映射到整数值?作为getString方法,它还具有getInt方法。但是您提到的json数据中的所有属性都是字符串。先生,我可以通过这个方法访问对象。但是,在将它与查找进行比较之后,我还想映射它。什么是
stringData
?这是否意味着读取JSON文件的路径?我会在json中包含计时数据吗?例如:“PT1H10M20S”
@AnishB。不,只有一个小时Minutes@AnishB谢谢我还需要将输出存储在JSON中。检查更新的Qs。我用Qs和HB写过信。我想设置一个查找表,在该表中,我对与整数映射的值的范围进行了更正。感谢您的解决方案,我想在这方面做一些改进。每当我通过10的精确倍数时,它就会返回所需的答案。但当我输入“totalTime”:“PT23M”时,它会返回答案“totalTime”:“23”,而不是“totalTime”:“3”。请把这个弄清楚。不,先生。这就是问题所在。我不需要23
。我需要它是2
。像PT37M
我需要3
@Lily完成。现在,检查更新的答案。我更改了密码。它适用于任何组合。当“totalTIme”:“PT1H”
`java.lang.ArrayIndexOutOfBoundsException:1`@Lily Wait looking时,此代码给出错误。