繁体   English   中英

使用日期值迭代 JSON object

Iterating on JSON object with Date values

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图在我的 API 月费率调用中找到最高和最低费率,object BPI 具有字符串值,我有点困惑如何实际计算日期作为例如键和速率作为值,以便可以完成迭代。

我想使用 Map,但不知道如何正确进行:

一个

2 个回复

看起来您有一个 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 答案中有详细描述)。

1 如何使用Jackson迭代JSON对象?

我最终想要使用我的JSON数据集创建反向索引。 我知道如何解析一个JSON对象但是如何迭代很多? 这是我的工作: 文件1: 我的代码: 现在,我想遍历这个在数组中有2个JSON对象的JSON文件: 文件2: 如果doc_id是唯一键,我如何使用Jackso ...

2 使用jquery基于值的JSON迭代

我正试图通过种子使用以下json文件创建一个简单的NBA西部领导者展示: 现在我有以下内容: 我只是想按顺序列出领导者。 所以现在我们有 金州 孟菲斯 3.休斯顿 波特兰 5.洛杉矶快船队 达拉斯 ......等等。 这是基于 ...

3 迭代所有 json 对象并替换值

我有以下 JSON: 我必须遍历 json 对象并替换以${开头的变量值,例如${name_variable}并且新的 json 应该采用相同的格式(替换变量的值提到${} ) 我如何迭代如此复杂的 Json 对象并替换变量中的值 我试过下面的代码,但没有按预期工作: 检查它是否是有效的 ...

4 使用DOJO或javascript迭代JSON对象

我的json对象来自ajax resaponse.It看起来像这样。 现在我想要使用DOJO 1.10库或普通的循环javascript迭代这个。但是我无法通过循环。 我试过这个方法 能帮到我吗? 注意:这个json对象每次动态出现,键与jsp页面中输入类型的id相同。 ...

5 使用jsoncpp迭代一组JSON对象

我有一个JSON对象数组,jsonArr说,有以下几种: 使用jsoncpp,我试图遍历数组并检查每个对象是否有成员"attr1" ,在这种情况下我想将相应的值存储在向values 。 我尝试过类似的东西 但不断收到错误消息 ...

6 解析 JSON 并使用 jq 迭代对象

我正在尝试使用 jq 解析上述 json (data1.json),但我无法访问元数据 object。 我最终将使用元数据 object 作为字符串插入数据库。 它可以有任意数量的字段,结构不固定。 这是我正在使用的脚本。 预期 output: 我在这里做错了什么? 任何帮助表示赞赏。 ...

7 使用map和key迭代json对象数据

我试图使用map从json对象中收集数据并分配键,循环中的配对引用,但对我来说不起作用。 我可以在迭代中读取值,但是需要在需要帮助的地方分配键和值。 它无法识别“关键”和“价值” 数据源结构 ...

8 如何使用右侧术语迭代 JSON object

假设我有一个 JSON object 像: 在 JavaScript 中,我可以使用以下方法遍历此 object: 其中strKey是 label 例如vcFirstName , rightSide 将是enFN 。 有没有办法创建一个循环,而不是左侧作为迭代器,右侧用于迭代 JSON? ...

10 '恐慌!' 同时使用Json对象并迭代字符串值

我试图在JSON文件中找到值(output.json)使用文本文件(keys.txt)中给出的键。 我加载了keys.txt并使用strip(“,”)来创建一个可迭代的。 我已经使用Json :: from_str()将output.json文件转换为'output_data'变量,类型 ...

2019-05-08 11:26:19 0 51   rust
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM