Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在一个字符串中显示json_Java_Json - Fatal编程技术网

Java 在一个字符串中显示json

Java 在一个字符串中显示json,java,json,Java,Json,当发出http请求以获取twitch聊天中的用户列表时,我会得到如下响应: { "_links": {}, "chatter_count": 27, "chatters": { "moderators": [ "user1", "user2", "user3", "...", ], "viewers": [ "user4", "user5", "user6", ".

当发出http请求以获取twitch聊天中的用户列表时,我会得到如下响应:

{
  "_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);
    }
您可以
将所有新行替换为空格。
包括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!
for(字符串temp=br.readLine();temp!=null;temp=br.readLine())

系统输出打印(温度+“”);//@Andremoniy似乎OP只是从一个
BufferedReader
读取,至少对我来说是这样,虽然没有太多的上下文。我有点知道你想要我做什么,但我真的不知道怎么做:“你可以用空格替换所有的换行符。”很容易理解。问题是,我没有得到JSON作为一个整体,而是一行一行地得到它。(我在最后编辑了我的问题,这样你就可以看到我是如何打印的。)@1blustone@devistud然后使用
read
而不是
readLine
:)我的答案包括一个简单的版本
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();