打印确认JSON含sessionId但解析时提示key不存在如何解决
问题根因
你用错了解析方法:org.json.HTTP.toJSONObject()的设计目标是解析HTTP头格式的键值对文本(每行格式为键: 值,和HTTP请求/响应头的格式一致),根本不是用来解析标准JSON字符串的。
当你传入{"sessionId":"foo"}这种标准JSON串时,该方法不会按JSON语法解析内容,会错误地把引号、花括号等JSON语法字符算入键名或值的内容,最终生成的JSONObject里不存在名为sessionId的键(实际键名可能带多余的双引号、或者整个结构被错误拆分)。你可以在解析后遍历jsonObject.keySet()打印所有键、或者直接输出jsonObject.toString(),就能看到完全不符合预期的解析结果,此时调用getString("sessionId")自然会抛出键不存在的异常。
修复方案
不要调用HTTP.toJSONObject()处理JSON字符串,直接使用JSONObject的构造方法传入JSON内容即可:
// 读取请求体内容,trim去掉首尾空白、多余BOM等干扰字符 String sessionCookie = req.getReader().lines().reduce("",String::concat).trim(); // 直接用JSONObject构造方法解析标准JSON JSONObject jsonObject = new JSONObject(sessionCookie); String someString = jsonObject.getString("sessionId");
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

