我遇到了有关从 HTTP 请求正文进行 JSON 转换的问题。 首先,这是发送请求的 Javascript 代码。
例如,object
变量可以是 {"view":"global"}
。
var sendHttpRequest = function (url, object)
{
xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader("Content-type", "application/json; charset=UTF-8");
var json = JSON.stringify(object);
xmlhttp.send(json);
};
然后这是 Java 部分:
@Override
@RequestMapping(value = "/departments")
public
@ResponseBody
void getJsonObject(HttpServletRequest request)
{
StringBuilder jb = new StringBuilder();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) {}
JSONObject json = new JSONObject(jb.toString());
String view = json.getString("view");
...
}
最后一行引发此错误:
org.json.JSONException: JSONObject["view"] not found.
但是,如果我打印 json
变量,我会得到 {"view":"global"}
,这似乎是正确的......
有人知道吗?
非常感谢!
编辑:
“未找到”问题是由于 jb.toString() 直接传递给 JSONObject 构造函数造成的。这是编辑后的代码:
@Override
@RequestMapping(value = "/departments")
public
@ResponseBody
void getJsonObject(HttpServletRequest request)
{
StringBuilder jb = new StringBuilder();
String line = null;
try {
BufferedReader reader = request.getReader();
while ((line = reader.readLine()) != null)
jb.append(line);
} catch (Exception e) {}
String str = jb.toString();
JSONObject json = new JSONObject(str);
String view = json.getString("view");
...
}
但这一次,错误是:
A JSONObject text must begin with '{' at 1 [character 2 line 1]
适用于 json 硬编码,但不适用于 str
变量。然而,它的打印似乎是正确的,没有空格:
{"view":"global"}
最佳答案
当我按如下方式运行您的代码时,
public static void main(String[] args) {
String str = "{\"view\":\"global\"}";
org.json.JSONObject json = new org.json.JSONObject(str);
String view = json.getString("view");
System.out.println(view);
}
我明白了
global
关于java - 奇怪的 "JSONObject not found"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25408575/