java - 获取包含 200 个对象的 Json,但在一个站点上仅显示 100 个

标签 java arrays json twitch

我正在使用 Twitch IRC 机器人,但遇到了问题。

我们通过 twitch API (json) 收到大量信息,例如关注者、日期.. 观看者计数.. 关注者数量等。

我们正在创建一个跟随函数来读取整个列表中的所有名称并将其全部设置到我们的数据库中。首先,我们尝试读取所有内容并 system.output 它们,但总是收到错误:org.json.JSONException:JSONArray[100] 未找到。

我们注意到“0”也持有一个数组,因此我们将循环设置为 0-99,然后它应该通过添加 100+(下一个站点)来更改链接并再次读取 JSON。那么它应该继续循环下一个站点。

下面是读取方法的主要代码。

我们尝试过调试,但尚未找到解决方案 x(

MyBot 主要代码片段:

JSONObject follower = null;
String followername = null;
int listnumber;

offsetvalue = 0;

for(int i = 0; i < TwitchStatus.totalfollows; i++) { 

    try {
        follower = TwitchStatus.followerarray.getJSONObject(i);
    } catch (JSONException e2) {
        e2.printStackTrace();
    }        

    try {
        followername = follower.getJSONObject("user").getString("display_name");
    } catch (JSONException e) {
        e.printStackTrace();
    } 

    System.out.println("array ist: "+i +" " +followername);

    listnumber = offsetvalue+99; // 0+99

    if (i == listnumber){
        offsetvalue = offsetvalue+100;

        try {
            TwitchStatus.FollowerTicker();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
    // System.out.println("Follower abgleichs-Liste: "+followername);        
}

还有 Reader 方法:

////////////////////////////////////////////////////////////////////////////////////
// Twitch Follower Ticker
////////////////////////////////////////////////////////////////////////////////////

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

  public JSONObject readJsonFromUrl4(String url) throws IOException, JSONException {
    InputStream is = new URL(url).openStream();
    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
        String jsonText = readAll4(rd);
        JSONObject json = new JSONObject(jsonText);
        return json;
    } finally {
        is.close();
    }
  }

  public static void FollowerTicker() throws IOException, JSONException {
    json = readJsonFromUrl2("https://api.twitch.tv/kraken/channels/dotastarladder_en/follows?direction=DESC&limit=100&offset="+MyBot.offsetvalue+"");

    followerarray = json.getJSONArray("follows");

    {
        JSONObject follower = followerarray.getJSONObject(0);
        neuerfollower = follower.getString("created_at");
        fname = follower.getJSONObject("user").getString("display_name");  
        totalfollows = json.getInt("_total");
    }
} 

最佳答案

来自API docs的注释:

limit optional integer Maximum number of objects in array. Default is 25. Maximum is 100.

那么,你做什么呢?当然是查询下一个!以下是链接页面中的 JSON 片段,以及下一个 URL 的示例。基本上,您只需输入一个偏移量,但 URL 已经声明了它,所以...

{
  "_total": 1234,
  "_links": {
    "next": "https://api.twitch.tv/kraken/channels/test_user1/follows?direction=DESC&limit=25&offset=25",

我将如何解决这个问题是这样的:

  1. 创建一个接受 URL 来解析 JSON 文本的 AsyncTask。
  2. 收到数据后,启动一个新任务来读取下一个数据。
  3. 读取此 JSON 字符串中收到的所有内容
  4. 根据需要下载所有内容后进行编译。

关于java - 获取包含 200 个对象的 Json,但在一个站点上仅显示 100 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568695/

相关文章:

c# - 使用 ServiceStack 反序列化数组

java - 从 axis2 中的静态上下文获取参数

java - 我可以让 Log4J 暂时禁止记录特定消息吗?

java - 同时存在多个亚型?

java - 如何使用Servlet在MySQL中保存数组?

javascript - Json 路径工作不正常

java - 任何用途的类中的匿名 block 中的命令

java - 迭代数组列表并打印数组中的每个元素

python - 使用模式迭代列表中的项目?

mysql - 确定 JSON 值是否包含指定属性的 SQL 查询