【发布时间】:2014-08-20 15:21:27
【问题描述】:
我遇到了关于从 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"}
【问题讨论】:
-
您是否尝试在单元测试或非常小的控制台项目中重现同样的错误,并提供您的
String作为您的 JSON 对象? -
不,我没有,但我多次尝试用一些 json 硬代码替换 jb.toString(): JSONObject json = new JSONObject("{\"view\":\"global\"}" );,但也会出现同样的错误。
-
你使用的是来自 json.org 的
JSONObject,对吧? -
@LuiggiMendoza 是的,按照执行情况
-
@user3218114 只是想确定...谁知道...
标签: java javascript json httprequest