Java 如何将JSON消息的一部分解析为字符串并将其传递给另一个类?

Java 如何将JSON消息的一部分解析为字符串并将其传递给另一个类?,java,Java,我收到以下JSON消息作为服务器的响应: { "HttpStatus": 500, "Errors": [ { "ErrorCode": 325267273, "Message": "Object too old", "ParameterName": null } ] } 获得响应: if (res.getS

我收到以下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中的一个变量,并将其传递给另一个类。 如何实现这一点?

您可以执行以下操作

import org.json.*;

String jsonString = ... ; //assign your JSON String here
JSONObject obj = new JSONObject(jsonString);
String status = obj.getString("HttpStatus");

JSONArray arr = obj.getJSONArray("Errors");
for (int i = 0; i < arr.length(); i++)
{
    String errorCode = arr.getJSONObject(i).getString("ErrorCode");
    ......
}

...
import org.json.*;
字符串jsonString=//在此处指定JSON字符串
JSONObject obj=新的JSONObject(jsonString);
String status=obj.getString(“HttpStatus”);
JSONArray arr=obj.getJSONArray(“错误”);
对于(int i=0;i
对于org.json

您应该添加一个maven依赖项

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

org.json
json
20210307

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

while((msg=rdr.readLine())!=null){
int i=msg.indexOf(“\”消息\“:”);
//如果未包含,请继续下一行
如果(i==-1)
继续;
i+=10;//添加搜索字符串的长度以达到匹配的结尾
//跳过所有空格
while(Character.isWhitespace(msg.charAt(i)))
i++;
//如果下面是一个字符串
如果(msg.charAt(i++)=''''”){
StringBuilder sb=新的StringBuilder();
字符c;
//当未到达字符串末尾时
对于(;(c=msg.charAt(i))!=“”;i++){
//对于转义引号和反斜杠;如果没有
如果(c=='\\')
sb.append(msg.charAt(++i));
否则某人附加(c);
}
messageString=sb.toString();
}
}

不幸的是,您的代码示例不完整,例如,无法看到“res”是什么类型的对象。正如@Melloware和@asbrodova所说,您可以使用现有的JSON解析器,比如org.JSON,或者因为您已经逐行循环了消息,所以您可以简单地使用正则表达式来提取消息字符串

String extractedString=”“;
字符串strLine=“\”消息\“:\”对象太旧\“,”;
模式消息\u Pattern=Pattern.compile(“(?i)^.*?\”消息\“\:\\s*?\”(.*?\”*?\\Z”);
匹配器m=消息模式匹配器(strLine);
if(m.find()){
extractedString=m.group(1);
System.out.println(“找到:“+extractedString+”);
}

这是否回答了您的问题?很遗憾,没有。我从服务器收到的消息各不相同。我需要使用消息部分作为对象。不幸的是,我不能使用Maven。EJB不是一个构建工具。是的,它保证有“Message”标记。所以这个答案是有效的。谢谢。其实不需要知道,比如问问题的“res”对象。在本例中,重要的任务是解析“msg”变量。如果我在提出问题时不清楚,请道歉。