user3220962 user3220962 - 1 month ago 9
JSON Question

JSON array Read first element?

I got an JSON Array for my Twitch Following user checker.
I would like to get only the first date (cause thats the newest one)
out of the array but everytime my code gets executed it just swap to the next "date" then.

How can i change this?

Code;

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);

}
}


edited Code;

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);

}
}

Answer

Just dont loop and do something like that:

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()
    }
}

iam not sure if this is exactly what you want ;)