有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在一个字符串中显示json

当发出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);
    }

共 (1) 个答案

  1. # 1 楼答案

    您可以使用空格replace所有换行符。 包括\rWindows样式换行符的可能性

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

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