java - 奇怪的 "JSONObject not found"错误

标签 java javascript json httprequest

我遇到了有关从 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/

相关文章:

java - 如何覆盖 Mockito 中的 setter 方法?

java - 0.0 和 1.0 之间的随机 float 在 Java 中均包含在内

java - org.springframework.ws.client.WebServiceTransportException : [ISS. 0084.9001]凭据无效[401]

javascript - 根据属性值对 JSON 数组进行排序

java - JPA 构造寻找错误的构造函数

javascript - 为什么这个正则表达式不抓取每个 <li> 的单独匹配项?

javascript - 访问angularjs中另一个模块中定义的工厂

javascript - 在 Angular.js 中的 FineUploader 回调中更新 ngModel

java - JSON:将对象转换为数组

java - 如何从 Controller 访问 REST API 的所有可用路由?