我设法在Eclipse中用JSON打印这个网站
https://www.quandl.com/api/v3/datasets/SSE/HYQ.json?start_date=2017-01-01&end_date=2017-01-31
如您所见,我们有一个数组,其中包含某个公司的股票价值。该数组的长度为22.例如:
data-id="example-id" th:attr="data-id=${car.id}"
我的任务是检查哪一个具有更大的值。比如,检查89.13是否大于89.22?不,因此检查是否89.22>比86.77,没有等等。然后打印出来,在哪个日期是最大的价值。问题是在Java中检查它。我不知道如何比较这3个(更不用说22个)
编辑:逻辑对我来说很清楚,我的问题是在Java中解决这个问题。上面给出的这3个例子很不错。这是我的代码:
["2017-01-27",89.13,87.611,88.18,87.699,750] //Array index 2
["2017-01-26",89.22,87.699,87.699,88.315,190]//Array index 3
["2017-01-31",86.77,84.312,84.32,84.81,1205]//Array index 0
}
答案 0 :(得分:2)
JSON数组的元素是 JSON元素。由于 JSON元素可以是JSON数组,因此JSON数组可以包含JSON数组作为其元素。
这样的事情会做到:
JSONArray array = dataset.getJSONArray("data");
// Save the first array's values
String biggestDate = array.get(0).get(0); // index 0 is the date
double biggest = array.get(0).get(1); // index 1 is the stock price
// Iterate over all arrays and update biggest
for (int i = 0; i < 22; i++) {
JSONArray arrayI = array.get(i);
if (arrayI.get(1) > biggest) {
biggest = arrayI.get(1); // updating biggest
biggestDate = arrayI.get(0); // updating biggest's date
}
}
return biggestDate;
注意:未经测试!
22
和其他硬编码常量double
,使用BigDecimal
答案 1 :(得分:1)
array.get(0).get(0)对你有用吗? 对我而言。我不得不解析:
Optional<String> maxRow = array.toList().stream().map(Object::toString).max(new Comparator<String>() { @Override public int compare(String o1, String o2) {
return Double.valueOf(o1.split(",")[1]).compareTo(Double.valueOf(o2.split(",")[1])); }
});
System.out.println("Max row: " + maxRow.get());
产生了“最大”行:
最大行:[2017-01-26,89.22,87.699,87.699,88.315,190.0]
答案 2 :(得分:1)
实施以下方法。
private static String getDateWithMaxValue(JSONArray array) throws JSONException {
JSONArray stockData;
String dateWithMaxValue = "";
double maxValue = Double.MIN_VALUE;
for (int i = 0; i < array.length(); i++) {
stockData = array.getJSONArray(i);
if (stockData.get(1) instanceof Double) {
if (((Double) stockData.get(1)).doubleValue() > maxValue) {
maxValue = ((Double) stockData.get(1)).doubleValue();
if (stockData.get(0) instanceof String) {
dateWithMaxValue = (String) stockData.get(0);
}
}
}
}
return dateWithMaxValue;
}
只需添加通话
即可System.out.println(getDateWithMaxValue(array));
主中的以索引1处的最大值打印日期,其中 array 是您已声明的JSONArray。
(代码测试并返回日期2017-01-26,这是正确的)