2016-04-06 20 views
0

Ich versuche, ein Json-Ergebnis von einer URL (der Philips Hue-Emulator in diesem Fall) in ein JsonArray in Android Studio zu analysieren. Ich habe den folgenden Code so weit:String zu JSONArray in Java

String jsonString = serviceHandler.makeServiceCall(BASE_URL, ServiceHandler.GET); 
JSONArray lights; 

if (jsonString != null) { 
     try { 
      JSONObject jsonObject = new JSONObject(jsonString); 

      lights = jsonObject.getJSONArray("lights"); 

      for (int i = 0; i < lights.length(); i++) { 
       JSONObject l = lights.getJSONObject(i); 

       String name = l.getString("name"); 
       String bri = l.getString("bri"); 
       String hue = l.getString("hue"); 
       String sat = l.getString("sat"); 
       String status = l.getString("on"); 
      } 
     } catch (JSONException ex) { 
      ex.printStackTrace(); 
     } 
    } else { 
     Log.e("ServiceHandler", "Cannot get data from the url"); 
    } 

Aber, wenn ich versuche, diesen Code I a (...)

Typ org.json.JSONObject zu JSONArray

nicht konvertiert werden kann erhalten laufen

Fehler. Ich habe einige andere Möglichkeiten ausprobiert, die Zeichenfolge in ein JsonArray umzuwandeln oder die Zeichenfolge zu durchlaufen, aber ohne Erfolg.

Was mache ich falsch ??

Edit: Die Daten in jsonString:

{"lights":{"1":{"state":{"on":false,"bri":254,"hue":4444,"sat":254,"xy":[0.0,0.0],"ct":0,"alert":"none","effect":"none","colormode":"hs","reachable":true},"type":"Extended color light","name":"Hue Lamp 1","modelid":"LCT001","swversion":"65003148","uniqueid":"00:17:88:01:00:d4:12:08-0a","pointsymbol":{"1":"none","2":"none","3":"none","4":"none","5":"none","6":"none","7":"none","8":"none"}},"2":{"state":{"on":false,"bri":254,"hue":23536,"sat":144,"xy":[0.346,0.3568],"ct":201,"alert":"none","effect":"none","colormode":"hs","reachable":true},"type":"Extended color light","name":"Hue Lamp 2","modelid":"LCT001","swversion":"65003148","uniqueid":"00:17:88:01:00:d4:12:08-0b","pointsymbol":{"1":"none","2":"none","3":"none","4":"none","5":"none","6":"none","7":"none","8":"none"}},"3":{"state":{"on":true,"bri":254,"hue":65136,"sat":254,"xy":[0.346,0.3568],"ct":201,"alert":"none","effect":"none","colormode":"hs","reachable":true},"type":"Extended color light","name":"Hue Lamp 3","modelid":"LCT001","swversion":"65003148","uniqueid":"00:17:88:01:00:d4:12:08-0c","pointsymbol":{"1":"none","2":"none","3":"none","4":"none","5":"none","6":"none","7":"none","8":"none"}}},"schedules":{"1":{"time":"2012-10-29T12:00:00","description":"","name":"schedule","command":{"body":{"scene":null,"on":true,"xy":null,"bri":null,"transitiontime":null},"address":"/api/newdeveloper/groups/0/action","method":"PUT"}}},"config":{"portalservices":false,"gateway":"192.168.2.1","mac":"00:00:88:00:bb:ee","swversion":"01005215","linkbutton":false,"ipaddress":"192.168.178.31:5510","proxyport":0,"swupdate":{"text":"","notify":false,"updatestate":0,"url":""},"netmask":"255.255.255.0","name":"Philips hue","dhcp":true,"proxyaddress":"","whitelist":{"newdeveloper":{"name":"test user","last use date":"2016-04-06T16:51:26","create date":"2012-10-29T12:00:00"}},"UTC":"2012-10-29T12:05:00"},"groups":{"1":{"name":"Group 1","action":{"on":true,"bri":254,"hue":33536,"sat":144,"xy":[0.346,0.3568],"ct":201,"alert":null,"effect":"none","colormode":"xy","reachable":null},"lights":["1","2"]}},"scenes":{}} 
+0

Können Sie zeigen, was Sie analysieren möchten? –

+0

'Lichter' ist kein Typ jsonarray Post Ihre JSON-Zeichenfolge –

+1

Lichter ist ein JSONObject und kein Array –

Antwort

0

Das Problem ist, dass "lights" n ot a JSONArray aber ein JSONObject. Um also den Inhalt von "lights" abzurufen, müssen Sie alle Objekte von "lights" mithilfe der keys()-Methode durchlaufen.

Ersetzen Sie den Code aus Ihrem try Block mit dem folgenden Code, um alle Objekte in "lights" zu durchlaufen.

JSONObject jsonObject = new JSONObject(jsonString); 
JSONObject lights = jsonObject.getJSONObject("lights"); 
Iterator<String> keyIterator = lights.keys(); 

while (keys.hasNext()) { 
    String key = keyIterator.next(); 
    JSONObject l = lights.getJSONObject(key); 

    String name = l.getString("name"); 
    String bri = l.getString("bri"); 
    String hue = l.getString("hue"); 
    String sat = l.getString("sat"); 
    String status = l.getString("on"); 
} 
+0

Yeah. Das ist der Trick! – NVO

0

How to parse the JSON objects with each different key and value, using Java? besuchen diesen Link .. und dort können Sie verschiedene Schlüssel und Werte mit dem Zugriff. Sie müssen sich also keine Sorgen um den Schlüssel machen. und Sie haben Schlüssel wie "1" und "2" und so weiter. also iterieren Sie einfach durch Lichter Objekt und Sie erhalten Ihre Antwort. Wenn Sie ein Problem damit haben, zögern Sie nicht zu fragen.

von diesem erhalten Sie Schlüssel und danach müssen Sie nur Werte dieses Objekts erhalten.

1

die Taste „Lichter“ Karten ein JSONObject und Sie es zu einem JSONArray daher die exception.Change die Linie

lights = jsonObject.getJSONArray("lights"); 

zu

JSONObject lights = jsonObject.getJSONObject("lights"); 
0

Der folgende Code für Sie arbeiten sollten konvertieren :

String jsonString = serviceHandler.makeServiceCall(BASE_URL, ServiceHandler.GET); 

if (jsonString != null) { 
    try { 
     JSONObject jsonObject = new JSONObject(jsonString); 


     for (int 1 = 1; i <= 3; i++) { 
      JSONObject l = jsonObject.getJSONObject("lights").getJSONObject(Integer.toString(i)); 

      String name = l.getString("name"); 
      String bri = l.getString("bri"); 
      String hue = l.getString("hue"); 
      String sat = l.getString("sat"); 
      String status = l.getString("on"); 
     } 
    } catch (JSONException ex) { 
     ex.printStackTrace(); 
    } 
} else { 
    Log.e("ServiceHandler", "Cannot get data from the url"); 
} 
0

In Ihren JSONObject alle Schlüsselkarten zu einem JSONObject nicht auf ein JSONArray. So müssen Sie wie folgt lesen aus Ihrem JSONObject

JSONObject lights = jsonObject.getJSONObject("lights"); 

JSONObject schedules = jsonObject.getJSONObject("schedules"); 

JSONObject config = jsonObject.getJSONObject("config"); 

JSONObject groups = jsonObject.getJSONObject("groups"); 

JSONObject scenes = jsonObject.getJSONObject("scenes"); 

Hoffe, dass es für Sie helfen.