我正在尝试从此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最高的商品。
答案 0 :(得分:2)
使用Java访问JSON时,通常使用一个数据绑定库,该库将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;
}
使用此定义,我们可以要求数据绑定库(例如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。