在一个字符串中显示json

时间:2017-02-07 18:13:45

标签: java json

在制作http请求以获取抽搐聊天中的用户列表时,我得到这样的回复:

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

如何在一个字符串中获得所有这些?所以我有一个看起来像这样的字符串:

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

我的要求:

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

1 个答案:

答案 0 :(得分:0)

可以 replace所有带空格的换行符。 包含\r Windows样式换行符的可能性。

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

尽管您打印JSON的方式可能会导致换行。你在用什么库?如果有prettyPrint方法的任何等效方法,如果您不希望重新格式化JSON,请不要使用它。

例如,使用原始结果而不是已经解析的JSON对象。

我不确定您是如何阅读请求结果的,但是:

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

如果确定请求 包含换行符,则可以修改此读取方法以忽略它们。

编辑:

好吧,既然您使用readLine,为什么不忽略换行符?

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

或者,如果你想保留JSON:

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

将其子串以忽略第一个空格。