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

我想使用地图,但不确定如何正确进行:

一种

#1楼 票数: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
  }
}

由于您似乎在使用 Java,因此可以使用Jackson将 JSON 文档解析为类的实例,例如:

@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());

如果您需要完整的地图条目,请使用:

Entry<LocalDate, BigDecimal> max = 
        Collections.max(apiResponse.getBpi().entrySet(), Entry.comparingByValue());

Entry<LocalDate, BigDecimal> min = 
        Collections.min(apiResponse.getBpi().entrySet(), Entry.comparingByValue());

#2楼 票数:1

一种可能的解决方案是利用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 的回答中有详细描述)。

  ask by Tim Prozorov translate from so

未解决问题?本站智能推荐:

3回复

如何使用Jackson迭代JSON对象?

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

Java-如何迭代json对象键和值对?

下面是json格式: Document{ {Social=4, Productivity=5, Personalization=1, Entertainment=5, Music & Audio=4, Finance=7, Tools=9, Travel & Local=1, Foo
2回复

迭代所有json对象并替换值

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

迭代json对象列表?

我必须遍历 json 对象列表(“local_properties”)并检查每个对象是否“is_built_in”= false。 我该怎么做。 我收到以下 json 作为 GET API 的响应。
3回复

迭代JSON对象数组

我正在使用org.json.simple库来构造JSONObject JSONArray 。 所以我的结构看起来像 为了在Java中迭代数组,我尝试了 它打印了null ,但是当尝试打印obj.toString ,它按预期打印JSON字符串。 我正在使用org.json.simpl
2回复

迭代JSON数组对象

我正在查询并返回一个json字符串,为了这个例子,我将发布一个例子。 我试图找出如何挖掘值数组并找到哪个标记为默认值。 示例JSON 我获取JSON字符串并将其转换回JSONObject 当我输出content它返回以下内容。 如何正确浏览内容的值并找到isDefault的值?
1回复

ConverspringString对象可迭代的json对象

我在Spring控制器类中收到一个字符串对象,如下所示 这在技术上是2个阵列。 我想将这个字符串对象转换为JSON并在这两个数组上进行迭代,以获取每个数组的键。 我不希望像杰克逊和格森那样把它映射到任何POJO课程。
1回复

迭代对象Firebase的JSON对象

我正在使用firebase4j(Java的firebase库,我知道最好使用node,我只是想尝试用Java来做)。 在我的数据库中,我需要使用一堆图片信息来保存图片的网址。 事实是,图片网址本身已深入JSON 这就是为什么我试图为按分数排序的图片创建索引,其中包含指向Firebase数