首页 > 解决方案 > 如何将 JSON 消息的一部分解析为 String 并将其传递给另一个类?

问题描述

我有以下 JSON 消息作为来自服务器的响应:

{
  "HttpStatus": 500,
  "Errors": [
    {
      "ErrorCode": 325267273,
      "Message": "Object too old",
      "ParameterName": null
    }
  ]
}

得到响应:

  if (res.getStatus() == 200) {
    return true;
  } else {
    LogManager.getLogger(INIT_LOGGER).error(String.format("%d", res.getStatus()));
    BufferedReader rdr = new BufferedReader(new InputStreamReader((InputStream) res.getEntity()));
    StringBuilder sbr = new StringBuilder();
    while ((msg = rdr.readLine()) != null) {
      sbr.append(msg);
      System.out.println("Faces message 1: " + msg);
    }
    return false;

我想将“消息”部分解析为 Java 中的变量并将其传递给另一个类。如何做到这一点?

标签: java

解决方案


如果保证您的字符串只包含一个“消息”标签,您可以尝试获取该标签的索引并解析后面的字符串(为了提高效率而不是构建整个字符串):

while ((msg = rdr.readLine()) != null) {
    int i = msg.indexOf("\"Message\":");

    // If not contained, continue with next line
    if (i == -1)
        continue;

    i += 10; // Add length of searched string to reach end of match

    // Skip all whitespace
    while (Character.isWhitespace(msg.charAt(i)))
        i++;

    // If following is a string
    if (msg.charAt(i++) == '"') {
        StringBuilder sb = new StringBuilder();
        char c;

        // While not reached end of string
        for (; (c = msg.charAt(i)) != '"'; i++) {
            // For escaped quotes and backslashes; could be made a lot simpler without
            if (c == '\\')
                sb.append(msg.charAt(++i));
            else sb.append(c);
        }

        messageString = sb.toString();
    }
}

推荐阅读