我最终想要使用我的JSON数据集创建反向索引。 我知道如何解析一个JSON对象但是如何迭代很多? 这是我的工作: 文件1: 我的代码: 现在,我想遍历这个在数组中有2个JSON对象的JSON文件: 文件2: 如果doc_id是唯一键,我如何使用Jackso ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我试图在我的 API 月费率调用中找到最高和最低费率,object BPI 具有字符串值,我有点困惑如何实际计算日期作为例如键和速率作为值,以便可以完成迭代。
我想使用 Map,但不知道如何正确进行:
看起来您有一个 JSON 文档,如下所示:
{
"bpi": {
"2019-08-18": 9304.6179,
"2019-08-19": 9860.2835,
"2019-08-20": 9710.7164,
"2019-08-21": 9138.8615,
"2019-08-22": 9126.6978
}
}
As you seem to be using Java, you could use Jackson to parse the JSON document to an instance of a class such as:
@Data
public class ApiResponse {
private Map<LocalDate, BigDecimal> bpi;
}
其中bpi
JSON 属性将映射到Map<LocalDate, BigDecimal>
。
要解析 JSON,您可以:
String json = ...;
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
ApiResponse apiResponse = mapper.readValue(json, ApiResponse.class);;
然后,要找到最高值和最低值,您可以使用:
BigDecimal max = Collections.max(apiResponse.getBpi().values());
BigDecimal min = Collections.min(apiResponse.getBpi().values());
如果您需要完整的 map 条目,请使用:
Entry<LocalDate, BigDecimal> max =
Collections.max(apiResponse.getBpi().entrySet(), Entry.comparingByValue());
Entry<LocalDate, BigDecimal> min =
Collections.min(apiResponse.getBpi().entrySet(), Entry.comparingByValue());
一种可能的解决方案是利用java.util.regex
。 以下代码会将您的 json 解析为 2 组:日期字符串和值字符串。 然后我将它们放入Map <String, String>
(您可以将String
转换为您需要的任何类型):
Map <String, Double> bpiMap = new HashMap();
Pattern.compile("(?m)^\\s*(\\d{4}-\\d{2}-\\d{2})\\s*:\\s*([\\d\\.]+).*");
Matcher matcher = pattern.matcher(json);
while (matcher.find()) {
bpiMap.put(matcher.group(1), Double.valueOf(matcher.group(2)));
}
这是您的正则表达式解码:
(?m)
- 多行
^
- 行首
(\\d{4}-\\d{2}-\\d{2})
- 日期的第一组
\\s
- 空格
([\\d\\.]+)
- 值的第二组
最高和最低费率:
Entry<String, Double> hi = Collections.max(bpiMap.entrySet(), Entry.comparingByValue());
Entry<String, Double> lo = Collections.min(bpiMap.entrySet(), Entry.comparingByValue());
当然,这不是唯一的解决方案(例如,在 Jackson 对象中进行解析也是一种选择),但在我看来它更简单,并且不依赖于第三方库(如 com.fasterxml.jackson)。
注意:此解决方案非常适用于 json 结构,正如您所描述的那样简单,如果结构更复杂,则可能没有那么有用。 在这种情况下,可以考虑其他选项,例如 jackson (在@cassiomolin 答案中有详细描述)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.