JSON的格式分为两种,第一种相似于JavaScript中的对象(这里须要注意的是JS中的对象与java中的对象概念是不同的,js能够在对象中定义属性,方法等,相似于java中的类,可是java中的对象其实是类实例化的结果,是一个类的实例);第二种相似对象数组格式。java
下面建立js对象:两个对象obj1和obj2,一个包含两个对象的数组;ajax
var obj1 = { name: "小明", age: 25 } var obj2 = { name = "小王", age = 19 } var arr = [obj1,obj2];
假如咱们只须要发送某个对象的name和age值到后台,咱们只须要发送obj1或者obj2就行。下面是JS代码json
$.ajax({ async: true, url: "parseJson.do", data: JSON.stringify(obj1), processData: false, success: function(data){ //some code } })
是否是很简单,下面建立一个servlet来接收前台发过来的数据数组
//省略import各类包
async
@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); } }
运行结果:ide
因而后台顺利得到前台传来的值;this
首先构建数组格式的json:就是建立对象数组,前台代码url
$.ajax({ async: true, url: "parseJson.do",//URL没有变意味着我用同一个servlet哦,演示本例的时候吧以前的都注释掉了 data: JSON.stringify(arr), processData: false, success: function(data){ //some code } })
后台仍是用servletspa
//省略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<Object> list = JSONArray.parseArray(json); //输出 System.out.println(list.get(0)); System.out.println(list.get(1)); } }
输出结果:3d
这不是输出的两行“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<Object> list = JSONArray.parseArray(json); //利用JSONArray.parseArray()方法的重载 List<Person> 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<Object> 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); } }
运行的结果:
一样成功得到前台数据