我正在尝试从此 URL ( https://rsbuddy.com/exchange/summary.json ) 查询此 JSON,以搜索并返回项目名称(例如 Cannonball 是 JSON 中的第一个名称),该名称具有以下之一的最大/最小值其他类别(例如 buy_quantity)。
编辑:在@meriton的帮助下,我的代码现在是
ObjectMapper mapper = new ObjectMapper();
try{
Map<String, ExchangeSummaryItem> exchangeSummary = mapper.readValue(new URL("https://rsbuddy.com/exchange/summary.json"), new TypeReference<Map<String, ExchangeSummaryItem>>() {});
System.out.println(exchangeSummary.size());
}catch (IOException e){
e.printStackTrace();
}
尽管如此,我似乎不知道如何通过 ExchangeSummary 进行搜索并找到某些值,例如具有最高 buy_quantity 的商品。
最佳答案
在 Java 中访问 JSON 时,通常使用数据绑定(bind)库将 JSON 数据复制到普通的 java 对象中。
为此,我们需要编写一个 Java 类来接受 JSON 数据。查看您的 JSON,它似乎包含一个具有动态属性的对象,该对象将每个 id 映射到描述该市场项目的对象。在 Java 方面,我们可以用 Map<String, ExchangeSummaryItem>
来表示。 ,其中ExchangeSummaryItem
定义为
public class ExchangeSummaryItem {
public String id;
public String name;
public boolean members;
public int sp;
public int buy_average;
public int but_quantity;
public int sell_average;
public int sell_quantity;
public int overall_average;
public int overall_quantity;
}
通过这个定义,我们可以询问数据绑定(bind)库,例如 Jackson将 JSON 数据读取到此类的对象中:
ObjectMapper mapper = new ObjectMapper();
Map<String, ExchangeSummaryItem> exchangeSummary = mapper.readValue(
new URL("https://rsbuddy.com/exchange/summary.json"),
new TypeReference<Map<String, ExchangeSummaryItem>>() {}
);
然后您可以简单地迭代集合,并对项目数据执行任何您想要的操作:
for (ExchangeSummaryItem item : exchangeSummary.values()) {
// do whatever you want with item
}
有关 Jackson 的更多信息,请查看他们的文档,特别是他们的 README .
关于java - 寻找 JSON 中的最大/最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55410970/