JSONObject не может прочитать атрибут из существующего объекта, даже если объект правильно создан - PullRequest
0 голосов
/ 10 марта 2020

У меня проблема с чтением атрибута json, хотя объект правильно создан.

Сначала я отправляю json со стороны клиента с JavaScript:

let object = {
        firstName: document.getElementById("firstName").value,
        lastName: document.getElementById("lastName").value,
        username: document.getElementById("username").value,
        password: document.getElementById("password").value,
        email: document.getElementById("email").value,
        action: "registration"
}

let request = new XMLHttpRequest();
...

На сервере сторона У меня есть код:

req.setCharacterEncoding("UTF-8");
    JSONObject jsonObject = null;

    // String address = "/WEB-INF/pages/login.jsp";
    StringBuffer jb = new StringBuffer();
    String line = null;
    try {
        BufferedReader reader = req.getReader();
        while ((line = reader.readLine()) != null)
            jb.append(line);
    } catch (Exception e) {
        /* report an error */ }

    try {
        jsonObject = HTTP.toJSONObject(jb.toString());
    } catch (JSONException e) {
        // crash and burn
        throw new IOException("Error parsing JSON request string");
    }

    String action = jsonObject.getString("firstName");

jsonObject существует, но программа генерирует org. json .JSONException: JSONObject ["firstName"] не найден.

Объект на стороне сервера, когда я использую отладчик : enter image description here

Ответы [ 2 ]

1 голос
/ 10 марта 2020

В вашем jsonObject нет ключа с таким именем, как firstName. Вместо этого вам нужно найти свойство Method, а затем проанализировать firstName из него. Сначала объявите метод GetQueryMap:

public static Map<String, String> GetQueryMap(String query)  
{  
    String[] params = query.split("&");  
    Map<String, String> map = new HashMap<String, String>();  
    for (String param : params)  
    {  
        String [] p=param.split("=");
        String name = p[0];  
        if(p.length>1)  {
           String value = p[1];  
           map.put(name, value);
        }  
    }  
    return map;  
}

Затем используйте его следующим образом:

String method = jsonObject.getString("Method");
Map params = GetQueryMap(method);
String firstName = (String)params.get("firstName");
String lastName = (String)params.get("lastName");
0 голосов
/ 10 марта 2020

Я думаю, проблема в том, что вы не правильно отправляете данные со стороны браузера. Вы отправляете правильный заголовок content-type (application/json)? Вы правильно сериализуете объект для отправки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...