在JSON中寻找最大值/最小值

时间:2019-03-29 05:22:52

标签: java json

我正在尝试从此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最高的商品。

1 个答案:

答案 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

相关问题