Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
使用SpringJava将JSON属性映射到整数_Java_Json_Spring_Jackson - Fatal编程技术网

使用SpringJava将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" } 我想在映射后将输

我有很多JSON文件,格式如下。我想将名为计时的一个属性映射到整数

test.json

"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时,此代码给出错误。