将 JSON 有效负载转换为 Java 中的有用数据

Converting a JSON payload into useful data in Java

首先,我是 Java 的新手。我正在尝试使用他们的 API 和 Arduino 为 Twitch 制作一个通知系统,而我目前几乎停留在开始阶段。我能够访问 API 并获取信息,但我不知道如何将其转换成有用的东西。这是我目前的代码。

public class commandRun {

public static void main(String[] args) {
    Process p;
    try {
        p = Runtime.getRuntime().exec("cmd /c curl -H \"Client-ID: clientID\" -X GET \"https://api.twitch.tv/helix/users/follows?first=1&to_id=channelID\n");

        p.waitFor();
        BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
        String twitchFollower;

        while((twitchFollower = reader.readLine()) != null) {
            System.out.println(twitchFollower);
        }
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

这个returns

{
  "total": 106,
  "data": [
    {
      "from_id": "followerID",
      "from_name": "follower",
      "to_id": "channelid",
      "to_name": "channel",
      "followed_at": "2019-10-06T21:03:03Z"
    }
  ],
  "pagination": {
    "cursor": "dontknowifthisissensitiveinfo"
  }
}

我希望能够从字符串中提取特定信息,例如关注者的姓名。

有很多 JSON 库可以实现这一点,如 jrook 的评论。
下面的示例代码显示了最流行的 2 个库 - JacksonGson - 如何获取特定字段的值。 (我假设follower名字的key是from_name。)

// Jackson
ObjectMapper mapper = new ObjectMapper();
String followerName = mapper.readTree(jsonStr)
        .get("data")
        .get(0)
        .get("from_name")
        .asText();
System.out.println(followerName);

// Gson     
followerName = new JsonParser().parse(jsonStr)
        .getAsJsonObject()
        .get("data")
        .getAsJsonArray()
        .get(0)
        .getAsJsonObject()
        .get("from_name")
        .getAsString();
System.out.println(followerName);

控制台输出:

follower
follower