Java 如何将JSON消息的一部分解析为字符串并将其传递给另一个类?
我收到以下JSON消息作为服务器的响应:Java 如何将JSON消息的一部分解析为字符串并将其传递给另一个类?,java,Java,我收到以下JSON消息作为服务器的响应: { "HttpStatus": 500, "Errors": [ { "ErrorCode": 325267273, "Message": "Object too old", "ParameterName": null } ] } 获得响应: if (res.getS
{
"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”变量。如果我在提出问题时不清楚,请道歉。