javascript
java ajax解析json数据_利用AJAX向后台servlet传JSON数据,后台利用fastjson进行解析
一,json的構建
JSON的格式分為兩種,第一種類似于JavaScript中的對象(這里需要注意的是JS中的對象與java中的對象概念是不一樣的,js可以在對象中定義屬性,方法等,類似于java中的類,但是java中的對象實際上是類實例化的結果,是一個類的實例);第二種類似對象數組格式。
下面創建js對象:兩個對象obj1和obj2,一個包含兩個對象的數組;
var obj1 = {
name: "小明",
age: 25
}
var obj2 = {
name = "小王",
age = 19
}
var arr = [obj1,obj2];
二、JSON的發送
假如我們只需要發送某個對象的name和age值到后臺,我們只需要發送obj1或者obj2就行。下面是JS代碼
$.ajax({
async: true,
url: "parseJson.do",
data: JSON.stringify(obj1),
processData: false,
success: function(data){
//some code
}
})
三、后臺servlet接收
是不是很簡單,下面創建一個servlet來接收前臺發過來的數據
//省略import各種包
@WebServlet("/parseJson.do")
public class ParseJsonServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//先創建字符流來讀取json
BufferedReader reader = new BufferedReader(req.getReader());
String json = reader.readLine();
//這里用fastjson來解析
JSONObject jo = JSON.parseObject(json);
//獲取name和age對應的值
String name = jo.getString("name");
int age = jo.getInteger("age");
System.out.println("name: "+name+";"+"age: "+age);
}
}
運行結果:
于是后臺順利獲得前臺傳來的值;
四、發送數組格式的JSON如何解析呢?
首先構建數組格式的json:就是創建對象數組,前臺代碼
$.ajax({
async: true,
url: "parseJson.do",//URL沒有變意味著我用同一個servlet哦,演示本例的時候吧之前的都注釋掉了
data: JSON.stringify(arr),
processData: false,
success: function(data){
//some code
}
})
后臺還是用servlet
//省略import各種包
@WebServlet("/parseJson.do")
public class ParseJsonServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//先創建字符流來讀取json
BufferedReader reader = new BufferedReader(req.getReader());
String json = reader.readLine();
//這里用fastjson來解析數組,我并不知道解析的數據是哪個對象,所以用了object的集合
List list = JSONArray.parseArray(json);
//輸出
System.out.println(list.get(0));
System.out.println(list.get(1));
}
}
輸出結果:
這不是輸出的兩行“JSON”嗎?我如何獲取name和age的值呢?
方法1:創建包含name和age成員變量的實體類,利用get方法不就能獲取值了!
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
接著我們修改servlet:
//省略import各種包
@WebServlet("/parseJson.do")
public class ParseJsonServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//先創建字符流來讀取json
BufferedReader reader = new BufferedReader(req.getReader());
String json = reader.readLine();
//這里用fastjson來解析數組,我并不知道解析的數據是哪個對象,所以用了object的集合
//List list = JSONArray.parseArray(json);
//利用JSONArray.parseArray()方法的重載
List list = JSONArray.parseArray(json,Person.class);
System.out.print("obj1的姓名" + list.get(0).getName());
System.out.print("obj2的年齡" + list.get(1).getAge());
}
}
輸出結果:
這樣順利的獲取name和age的值
方法2:我不想創建實體類,我對得到的類似于"JSON"的東西繼續進行解析
還是修改servlet:
//省略import各種包
@WebServlet("/parseJson.do")
public class ParseJsonServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//先創建字符流來讀取json
BufferedReader reader = new BufferedReader(req.getReader());
String json = reader.readLine();
//這里用fastjson來解析數組,我并不知道解析的數據是哪個對象,所以用了object的集合
//List list = JSONArray.parseArray(json);
//解析第一個'JSON'
JSONObject jo1 = JSON.parseObject(String.valueOf(list.get(0)));
//獲取obj1的name
String name1 ?= jo1.getString("name");
//獲取obj2的age
JSONObject jo2 = JSON.parseObject(String.valueOf(list.get(1)));
int age2 ?= jo2.getInteger("age");
System.out.println("obj1的name: "+name1+"obj2的age"+age2);
}
}
運行的結果:
同樣成功獲得前臺數據
總結
以上是生活随笔為你收集整理的java ajax解析json数据_利用AJAX向后台servlet传JSON数据,后台利用fastjson进行解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: brew 安装java8_mac使用br
- 下一篇: java tika pdf转图片_使用t