2017-01-05 4 views
-4

Das ist, was ich Text im JSON-Format von einer Website lesen muss. Aber ich habe den FehlerJSON als Zeichenfolge gespeichert. Cant scheint es zu analysieren - Java

java.lang.ClassCastException: org.json.simple.JSONObject nicht cast org.json.simple.JSONArray sein kann

Diese mich verrückt fährt. Kann jemand helfen? Ich muss auch diese Zeichenfolge für alle Instanzen von "Benutzername" überprüfen und etwas für jede von ihnen ausführen.

public class CommandCheck implements CommandExecutor { 
private String username; 
private static String host = "example.com"; 
private URL url; 
private String apiKey = main.getNode("API-KEY"); 
@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] arg3) { 
    try { 
     this.url = new URL(CommandCheck.host); 
     final URLConnection conn = this.url.openConnection(); 
     conn.setConnectTimeout(5000); 

     if (this.apiKey != null) { 
      conn.addRequestProperty("x-api-key", this.apiKey); 
     } 
     conn.addRequestProperty("User-Agent", main.USER_AGENT); 

     conn.setDoOutput(true); 

     final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
     final String response = reader.readLine(); 
     sender.sendMessage(response); //Im just dumping the raw String for the person running the command to see Debug mostly 
     final JSONArray array = (JSONArray) JSONValue.parse(response); 

     if (array.isEmpty()) { 
      sender.sendMessage("The Array appears to be empty"); 
      return false; 
     } 
     JSONObject latestUpdate = (JSONObject) array.get(array.size() - 1); 
     username = (String) latestUpdate.get("Username"); 
     sender.sendMessage("whitelist add" + username); 
     return true; 
    } catch (final IOException e) { 
     if (e.getMessage().contains("HTTP response code: 403")) { 
      sender.sendMessage("I think there is an API key issue"); 
     } else { 
      sender.sendMessage("Problem of unknown orign"); 
     } 
     return false; 
    } 
} 
+3

Sie haben die Zeichenfolge nicht in Frage gestellt. Wetten, es ist ein Objekt anstelle eines Arrays, genau wie der Fehler sagt. – chrylis

+0

{"Rücknahmen": [{"reward_id": 450491, "replace_id": 1729333, "created_at": "2017-01-05T00: 42: 41.949Z", "Rückerstattung": false, "completed": false, " user_input ": {" Minecraft-Benutzername ":" Budderb123 "}," Benutzername ":" budderbb123 "}, {" reward_id ": 450491," replace_id ": 1729314," created_at ":" 2017-01-05T00: 41: 08.881 Z "," zurückerstattet ": false," completed ": false," user_input ": {" Minecraft Benutzername ":" Bigdaddy "}," Benutzername ":" dustinduse "}]," total ": 2," page_size ": 25} –

+0

Ja, das ist ein JSON-Objekt mit Schlüsseln der obersten Ebene 'repatrings',' total' und 'page_size'. Kein Array. – chrylis

Antwort

2

Versuchen Sie, die folgende Zeile zu ändern:

final JSONArray array = (JSONArray) JSONValue.parse(response);

zu:

final JSONObject jsObj = (JSONObject) JSONValue.parse(response);

Können Sie die JSON-String Sie zu analysieren versuchen? I.e. der Wert von response?

+0

{ \t "Rücknahme": [ \t \t { \t \t "reward_id": 450.491, \t \t "redemption_id": 1.729.333, \t \t "created_at": "2017-01-05T00: 42: 41.949Z“, \t \t "zurückerstattet": false, \t \t "abgeschlossen": false, \t \t "USER_INPUT": \t \t \t { \t \t \t "Minecraft Benutzername": "Budderb123" \t \t \t} , \t \t "username": "budderbb123" \t \t}, \t \t { \t \t "reward_id": 450.491, \t \t "redemption_id": 1.729.314, \t \t "created_at": "2017-01-05T00: 41: 08.881Z" \t \t "erstattet": false, \t \t "abgeschlossen": false, \t \t "USER_INPUT": \t \t \t { \t \t \t "Minecraft Benutzername": "Bigdaddy" \t \t \t}, \t \t "username": "dustinduse" \t \t} \t], \t "total": 2, \t "page_size": 25 } –

0
JsonReader jsonReader = Json.createReader(new StringReader(response.readEntity(String.class))); 
JsonArray jsonArray = jsonReader.readArray(); 
ListIterator l = jsonArray.listIterator(); 
while (l.hasNext()) { 
     JsonObject j = (JsonObject)l.next(); 
     JsonObject ciAttr = j.getJsonObject("ciAttributes") ; 
0

org.json.simple.JSONObject kann nicht auf org.json.simple.JSONArray gegossen werden bedeutet, dass Sie versuchen, das JSON-Objekt in das JSON-Array zu konvertieren. Wenn Ihre Antwort im json-Objekt eine Antwort ist, müssen Sie sie zuerst im Json-Objekt konvertieren.

nach dem Konvertieren Sie die Json-Array aus dem JSON-Objekt bekommen kann die get ("key-name")

JSONObject resObj = new JSONObject(responseString); 
JSONArray resArray = resObj.getJSONArray("Username"); 
for (int i=0; i<resArray.length(); i++) 
String resultString = resArray.getString(i); 

mit es gibt Ihnen alle usersname.

Ich denke, dieser Code hilft Ihnen, Ihr Problem zu lösen.

+0

Diese Antwort macht am meisten Sinn für mich. Wie konvertiere ich Objekt in Array? –

Verwandte Themen