在java servlet中读取JSON

问题描述 投票:0回答:4

我想在 servlet 中读取这个 json

{
    "text" : "ABC",
    "msg" : "9551667858",
    "all":[
        {"name":"one"},
        {"name":"two"}
        ],
    "obj":{
        "firstname":"John",
        "lastname":"Doe"
    }
}

现在我想将此值分别获取到字符串、jsonarray 和 json 对象

我就是这样做的

PrintWriter out = response.getWriter();
        try {
            String newObj = request.getParameter("text");;
            JSONObject jObj    = new JSONObject(request.getParameter("obj"));
            JSONArray jArray=new JSONArray(request.getParameter("all"));

out.print(newObj);

        } catch (Exception e) {
            e.printStackTrace();
            out.write(e.toString());
        }
        response.setContentType("application/json");
java json servlets
4个回答
2
投票

您的代码部分正确。

String newObj = request.getParameter("jsondata");
是正确的。然后您必须从
jObj
字符串创建
newObj

String jsonString = <your json String>
JSONObject jsonObj = new JSONObject(jsonString);
JSONObject allObj = jsonObj.getJSONObject("obj");
JSONArray allArray = jsonObj.getJSONArray("all");

2
投票

首先从请求对象中读取数据:-

String jsonStr = request.getParameter("jsondata");

使用 org.json 库解析它并创建 JsonObject :-

JSONObject jsonObj = new JSONObject(jsonStr );

现在,使用此对象来获取您的值:-

String id = jsonObj.getString("text");

您可以在这里查看完整的示例:-

如何在java中解析Json


1
投票

如果你的字符串数据像,

{
    "text" : "ABC",
    "msg" : "9551667858",
    "all":[
        {"name":"one"},
        {"name":"two"}
        ],
    "obj":{
        "firstname":"John",
        "lastname":"Doe"
    }
}

它可以变得像,

String jsonData = request.getParameter("jsondata");

解析为 JSONObject 是。

JSONObject jsonObject = new JSONObject(jsonData); // put "String"

你可以得到 JSONArray 像,

JSONArray jsonArray = jsonObject.getJSONArray("all");

祝你好运


0
投票

我认为为时已晚,但是: 这是我从其他 stackoverflow 用户那里使用的方法,我不记得是哪个帖子了。 在 Javascript 中你可以使用这样的方法:

    let xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
        if (this.readyState != 4) return;

        if (this.status == 200) {
            alert(this.responseText);
            var data = JSON.parse(this.responseText);


        }
    };

    xhr.open("POST", url, true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.send(JSON.stringify({answers}));

与 Servlet 中的服务器相比,您只需要使用此方法读取所有内容,然后获取所需的数据。

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.json.HTTP;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;

@WebServlet(name = "T", value = "/T")
public class WebExam extends HttpServlet {
       @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        JSONObject resp = new JSONObject();


        StringBuffer jb = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
                jb.append(line);
        } catch (Exception e) { /*report an error*/ }

        try {
            JSONObject jsonObject = HTTP.toJSONObject(jb.toString());
            response.getWriter().println(jsonObject.toString());
        } catch (JSONException e) {
            // crash and burn
            response.getWriter().println("unknown!");
        }
}

© www.soinside.com 2019 - 2024. All rights reserved.