2017-02-07 4 views
0

Wenn eine HTTP-Anforderung stellt eine Liste von Benutzern in einem Zucken Chat zu bekommen, erhalte ich eine Antwort wie folgt aus:Anzeige json in einer Zeichenfolge

{ 
    "_links": {}, 
    "chatter_count": 27, 
    "chatters": { 
    "moderators": [ 
     "user1", 
     "user2", 
     "user3", 
     "...", 
    ], 
    "viewers": [ 
     "user4", 
     "user5", 
     "user6", 
     "...", 
    ] 
    } 
} 

Wie kann ich das alles in einem String zu bekommen? Also ich habe ein String wie folgt aussehen:

{ "_links": {}, "chatter_count": 27, "chatters": { "moderators": [ "user1", "user2", "user3", "...", ], "viewers": [ "user4", "user5", "user6", "...", ] } } 

Meine Anfrage:

URL url = new URL("http://tmi.twitch.tv/group/user/" + streamerName + "/chatters"); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
    conn.setRequestMethod("GET"); 
    conn.addRequestProperty("Accept", "application/vnd.twitchtv.v5+json"); 
    conn.addRequestProperty("Client-Id", "j113orc4zqptuzyqnnw1vfel33esj0");  
    BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

    while (null != (temp = br.readLine())) { 
     System.out.println(temp); 
    } 
+0

@Andremoniy es scheint, OP liest einfach von einem 'BufferedReader', zumindest für mich, obwohl es nicht viel Kontext gibt. – Moira

+0

http://stackoverflow.com/questions/12173416/how-do-i-get-the-compact-form-of-pretty-printed-json-code – Andremoniy

Antwort

0

Sie konntereplace alle Zeilenumbrüche mit Leerzeichen. Enthält \r Möglichkeit für Windows-Stil Zeilenumbrüche.

String jsonOneLine = json.replaceAll("(\r)?\n", " "); 

Obwohl es möglich ist, dass Ihre Art des Druckens der JSON in die Zeilenumbrüche führt. Welche Bibliotheken benutzen Sie? Wenn es eine Entsprechung von prettyPrint gibt, verwenden Sie sie nicht, wenn der JSON nicht neu formatiert werden soll.

Verwenden Sie beispielsweise die Rohergebnisse anstelle eines bereits analysierten JSON-Objekts.

Ich bin nicht sicher, wie Sie die Anfrage Ergebnisse lesen, aber:

StringBuilder b = new StringBuilder(); 
int read = reader.read(); 
while(read != -1) { 
    b.append((char) read); 
    read = reader.read(); 
} 

Wenn Sie sicher die Anfrage sind tut Zeilenumbrüche enthalten, können Sie diese Lesemethode ändern, sie zu ignorieren.


Edit:

Nun, da Sie readLine verwenden, warum nicht Zeilenumbrüche ignorieren?

for(String temp = br.readLine(); temp != null; temp = br.readLine()) 
    System.out.print(temp + ' '); // <-- NOT println! 

Oder, wenn Sie die JSON behalten möchten:

StringBuilder progress = new StringBuilder(); 
for(String temp = br.readLine(); temp != null; temp = br.readLine()) 
    progress.append(' ').append(temp) 
String oneLine = progress.length() < 1 ? "{}" //No JSON found (SB empty) 
             : progress.substring(1).toString(); 

es Substring den ersten Raum zu ignorieren.

+0

Ich weiß irgendwie, was Sie tun wollen, aber ich nicht wirklich know how: "Sie könnten alle Zeilenumbrüche durch Leerzeichen ersetzen." einfach zu verstehen. Das Problem ist, dass ich den JSON nicht als Ganzes bekomme, ich bekomme ihn Zeile für Zeile. (Ich habe meine Frage am Ende bearbeitet, damit Sie sehen können, wie ich sie drucke.) @ 1blustone – devistud

+0

@devistud Dann benutze 'read' anstelle von' readLine' :) meine Antwort enthält eine einfache Version davon mit – Moira

+0

Gearbeitet, danke Sie :) – devistud

Verwandte Themen