HttpGet getRequest=new HttpGet("/rest/auth/1/session/");
getRequest.setHeaders(headers);
httpResponse = httpclient.execute(target,getRequest);
entity = httpResponse.getEntity();
System.out.println(EntityUtils.toString(entity));
以json格式输出如下
----------------------------------------
{"session":{"name":"JSESSIONID","value":"5F736EF0A08ACFD7020E482B89910589"},"loginInfo":{"loginCount":50,"previousLoginTime":"2014-11-29T14:54:10.424+0530"}}
----------------------------------------
我想知道的是如何使用 Java 操作此数据而不将其写入文件? 我想在我的代码中打印名称,值
杰克逊图书馆是首选,但任何人都可以。
提前致谢
答案 0 :(得分:2)
如果没有图书馆,可以采用以下两种方法。
新(更好)答案:
findInLine
可能会更好。 (scannerName.findInLine(pattern);
)
可能是这样的:
s.findInLine("{"session":{"name":"(\\w+)","value":"(\\w+)"},"loginInfo":{"loginCount":(\\d+),"previousLoginTime":"(\\w+)"}}");
w匹配单词字符(字母,数字和下划线),d匹配数字,+使它匹配多次(因此它只在一个字符后不会停止)。
在此处了解模式https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
老人回答:我很确定你可以在这里使用带有自定义分隔符的扫描仪。
Scanner s = new Scanner(input).useDelimiter("\"");
应该返回类似的内容:
{
session
:{
name
:
JSESSIONID
,
value
:
5F736EF0A08ACFD7020E482B89910589
等等。然后只需对该列表进行排序/使用更智能的分隔符/删除不必要的位。 摆脱所有其他项目是一个相当不错的开始。
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html有关于此的信息。
答案 1 :(得分:2)
您可以使用this JSON库将您的json字符串解析为JSONObject,并从该对象读取值,如下所示:
JSONObject json = new JSONObject(EntityUtils.toString(entity));
JSONObject sessionObj = json.getJSONObject("session");
System.out.println(sessionObj.getString("name"));
您需要从您想要读取值的位置读取该对象。在这里,您需要name
对象中session
参数的值,因此您首先使用getJSONObject(KeyString)将session
的值作为JSONObject获取并阅读name
使用函数getString(KeyString)从该对象获取的值如上所示。
愿这对你有所帮助。
答案 2 :(得分:2)
我非常推荐建立在apache http api上的http-request。
private static final HttpRequest<Map<String, Map<String, String>>> HTTP_REQUEST = HttpRequestBuilder.createGet(yourUri, new TypeReference<Map<String, Map<String, String>>>{})
.addDefaultHeaders(headers)
.build();
public void send(){
ResponseHandler<Map<String, Map<String, String>>> responseHandler = HTTP_REQUEST.execute();
Map<String, Map<String, String>> data = responseHandler.get();
}
如果您想使用jackson,您可以:
entity = httpResponse.getEntity();
ObjectMapper mapper = new ObjectMapper();
Map<String, Map<String, String>> data = mapper.readValue(entity.getContent(), new TypeReference<Map<String, Map<String, String>>>{});