在制作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);
}
答案 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();
将其子串以忽略第一个空格。