首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取JSON中字段的最后一个条目

如何获取JSON中字段的最后一个条目
EN

Stack Overflow用户
提问于 2021-07-29 10:42:47
回答 1查看 56关注 0票数 0

我使用来自api.nasa.gov的一个API来读取当天最新的太阳耀斑的震级信息,该API是通过以下Java类查询的。

该响应用于填写气象站上的一个字段,该字段通知当前的太阳危害。

问题是这段代码只返回当天第一个"flrID“(太阳耀斑)事件的"classType”(量级)。例如,在7月3日,不止一个事件,最相关的事件是最新的。

我正在尝试找出如何获得JSON字符串中最后一个" flrID“的"classType”,因为flrID文本包含未知的任意时间。

其次,我不确定如何从NASA获得事件驱动的更新,而不是从推送的电子邮件消息。我被允许每3.6秒一个API请求,所以这是可行的,但我正在询问是否有更便宜的方法来从NASA获得接近实时的更新。

代码语言:javascript
运行
复制
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import org.json.JSONException;
import org.json.JSONObject;

public class NasaFlrApiReader {

    public static final String API_KEY = "DEMO_KEY";

    private static String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

    public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
        try (InputStream is = new URL(url).openStream()) {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
            String jsonText = readAll(rd);
            int i = jsonText.indexOf("{");
            jsonText = jsonText.substring(i);
            JSONObject json = new JSONObject(jsonText);            
            return json;
        }
    }

    public static void main(String[] args) throws IOException, JSONException {
        JSONObject json = readJsonFromUrl("https://api.nasa.gov/DONKI/FLR?startDate=2021-07-27-03&endDate=2021-07-03&api_key=" + API_KEY);
        System.out.println("Class Type: " + json.get("classType"));
    }
}

这是从上面的代码返回的JSON文本:

代码语言:javascript
运行
复制
[
  {
    "flrID": "2021-07-03T02:14:00-FLR-001",
    "instruments": [
      {
        "displayName": "GOES-P: EXIS 1.0-8.0"
      }
    ],
    "beginTime": "2021-07-03T02:14Z",
    "peakTime": "2021-07-03T02:31Z",
    "endTime": "2021-07-03T02:39Z",
    "classType": "C5.7",
    "sourceLocation": "N23W75",
    "activeRegionNum": 12838,
    "linkedEvents": [
      {
        "activityID": "2021-07-03T03:48:00-CME-001"
      }
    ],
    "link": "https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/FLR/17197/-1"
  },
  {
    "flrID": "2021-07-03T07:04:00-FLR-001",
    "instruments": [
      {
        "displayName": "GOES-P: EXIS 1.0-8.0"
      }
    ],
    "beginTime": "2021-07-03T07:04Z",
    "peakTime": "2021-07-03T07:17Z",
    "endTime": "2021-07-03T07:22Z",
    "classType": "M2.7",
    "sourceLocation": "N23W78",
    "activeRegionNum": 12838,
    "linkedEvents": [
      {
        "activityID": "2021-07-03T08:00:00-CME-001"
      }
    ],
    "link": "https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/FLR/17189/-1"
  },
  {
    "flrID": "2021-07-03T14:18:00-FLR-001",
    "instruments": [
      {
        "displayName": "GOES-P: EXIS 1.0-8.0"
      }
    ],
    "beginTime": "2021-07-03T14:18Z",
    "peakTime": "2021-07-03T14:29Z",
    "endTime": "2021-07-03T14:34Z",
    "classType": "X1.5",
    "sourceLocation": "N23W80",
    "activeRegionNum": 12838,
    "linkedEvents": [
      {
        "activityID": "2021-07-03T14:48:00-CME-001"
      }
    ],
    "link": "https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/FLR/17201/-1"
  },
  {
    "flrID": "2021-07-03T16:59:00-FLR-001",
    "instruments": [
      {
        "displayName": "GOES-P: EXIS 1.0-8.0"
      }
    ],
    "beginTime": "2021-07-03T16:59Z",
    "peakTime": "2021-07-03T17:03Z",
    "endTime": "2021-07-03T17:14Z",
    "classType": "M1.0",
    "sourceLocation": "N23W82",
    "activeRegionNum": 12838,
    "linkedEvents": [
      {
        "activityID": "2021-07-03T17:36:00-CME-001"
      }
    ],
    "link": "https://kauai.ccmc.gsfc.nasa.gov/DONKI/view/FLR/17208/-1"
  }
]
EN

回答 1

Stack Overflow用户

发布于 2021-07-29 15:02:13

JSON包含一个数组,因此在反编译期间,您需要使用JSONArray,然后使用length-1获取数组的最后一个元素。

代码语言:javascript
运行
复制
 JSONArray jsonArr = new JSONArray(jsonText);
 JSONObject lastObject = (JSONObject) jsonArr.get(jsonArr.length()-1);

如果length-1没有给出最后一条记录,那么您需要根据必填字段对JSONArray进行排序,然后根据排序取第一条或最后一条记录。您可以查看以下对JSONArray How can I sort a JSONArray in JAVA进行排序的线程

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68569407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档