【问题标题】:JSON array Read first element?JSON数组读取第一个元素?
【发布时间】:2014-03-25 02:18:37
【问题描述】:

我的 Twitch Follow 用户检查器有一个 JSON 数组。 我只想得到第一个日期(因为那是最新的) 在数组之外,但每次我的代码被执行时,它只是交换到下一个“日期”。

我该如何改变这个?

代码;

import org.jibble.pircbot.*;
import org.json.JSONException;
import org.json.simple.*;
import org.json.simple.parser.*;
import org.w3c.dom.ranges.RangeException;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.*;



////////////////////////////////////////////////////////////////////////////////////
                // 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 void FollowerTicker() throws IOException, JSONException {
                    json = readJsonFromUrl2("https://api.twitch.tv/kraken/channels/"+ownerchannel+"/follows");

                    JSONArray followerarray = json.getJSONArray("follows");

                    for(int n = 0; n < followerarray.length(); n++)
                    {
                        JSONObject followertime = followerarray.getJSONObject(n);
                        String ftime = followertime.getString("created_at");


                        int maxfollows = json.getInt("_total");


                    System.out.println("Total Follows : "+maxfollows);
                    System.out.println("Loop Follow Date: "+ftime);

                    }
              }

编辑代码;

                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 void FollowerTicker() throws IOException, JSONException {
                    json = readJsonFromUrl2("https://api.twitch.tv/kraken/channels/"+ownerchannel+"/follows");

                    JSONArray followerarray = json.getJSONArray("follows");

//                  for(int n = 0; n < followerarray.length(); n++)
                    {
                        JSONObject followertime = followerarray.getJSONObject(0);
                        String ftime = followertime.getString("created_at");
                        String fname = followertime.getJSONObject("user").getString("display_name");  
                        int maxfollows = json.getInt("_total");


                    System.out.println("Total Follows zurzeit: "+maxfollows);
                    System.out.println("Neustes Follower - Datum: "+ftime);
                    System.out.println("Neuster Follower Name: "+fname);

                    }
              }

【问题讨论】:

  • 如果只想获取第一个日期,只需使用followerarray.getJSONObject(0); 获取JSONArray 中的第一个元素,不要循环。不知道是不是你想要的。
  • 哇,这正是我想要的!谢谢! =)

标签: java arrays json


【解决方案1】:

免费获得更简短的答案!

JSONObject first =
  new JSONArray(
    "[{\"Key1\":\"Value1\"}]").
  getJSONObject(0);

【讨论】:

    【解决方案2】:

    只是不要循环并做类似的事情:

    private static int FIRST_ELEMENT = 0;
    
    public static void main(String[] args) {
        JSONArray json = new JSONArray("[{\"Hello1\":\"1\"},{\"Hello2\":\"2\"}]");
    
        if (json.length() > 0) {
            System.out.println("First: " + json.getJSONObject(FIRST_ELEMENT).toString());// parse the date instead of toString()
        }
    }
    

    我不确定这是否正是您想要的;)

    【讨论】:

    • 我使用了汤加告诉我的方法,它现在按我想要的方式工作。不管怎么说,还是要谢谢你! =)
    • 实际上它的方法完全相同,但我的回答太晚了;)
    • 哦,好吧,我现在看到一个错误。一旦我的代码被使用,它就会打印 30 倍的日期 + 名称。每次都是第一个:o 对解决这个问题有什么帮助吗?
    • 我猜你没有删除 for ;) for(int n = 0; n &lt; followerarray.length(); n++)
    • 哦,是的,我的错 :D 但还有一件事我不明白;一旦它发布日期+名称,它也会发布整个 JSON :/ 确实更新了上面的整个代码。
    猜你喜欢
    • 2022-01-19
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多