接收前端传过来的json字符串,后端进行解析取值的方法总结
我们在工作中经常会遇到从前端接收json格式的字符串数据,然后再后端进行解析。正好今日项目里有用到,在此进行一下总结。
需要用到一个jar包,下面是jar包的下载地址
链接: 点此下载所需jar包.提取码:8tfu
package jsonCh;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class jsonTest {
public static void main(String[] args) {
//1.比如从前端接收的是这个样子的json字符串,但是我们是不能直接获取到name sex phone所对应的值的,所以必须要对这个字符串进行解析,
String stu = "{\"name\":\"ss\",\"sex\":\"1\",\"phone\":\"123456789\"}";
//先转换成JSONObject类型
JSONObject stuObj = JSON.parseObject(stu);
//通过JSONObject中的getString("key")方法,得到对应的值
System.out.println("name:"+stuObj.getString("name")+" sex:"+stuObj.getString("sex"));
//2.字符串中含有数组的,比如像下面这个字符串
String stuInfo = "{\"classId\":1,\"stuInfo\":[{\"name\":\"aa\",\"sex\":\"1\",\"phone\":\"123456789\"},{\"name\":\"bb\",\"sex\":\"0\",\"phone\":\"987654321\"}]}";
JSONObject stuInfoObj = JSONObject.parseObject(stuInfo);//先转换成JSONObject类型
System.out.println("班级id:"+stuInfoObj.getString("classId"));//拿到班级id
String stuInfoStr = stuInfoObj.getString("stuInfo");//拿到stuInfo这个json字符串
System.out.println("学生信息集合:"+stuInfoStr);
JSONArray jsonstuInfo = JSONObject.parseArray(stuInfoStr);//将stuInfo解析成json数组
for (int i = 0; i < jsonstuInfo.size(); i++) {//遍历学生信息
JSONObject jsonStuInfo = jsonstuInfo.getJSONObject(i);//根据下标以此拿数据,每一个数据又是一个JSONObject对象,所以用JSONObject接收
String name = jsonStuInfo.getString("name");
String sex = jsonStuInfo.getString("sex");
String phone = jsonStuInfo.getString("phone");
System.out.println("这个学生的姓名是:"+name+"性别是:"+sex+"电话号码是:"+phone);
}
}
}
这是控制台输出的信息:
最后总结一下:
其实从前台接收的json格式的字符串,看起来都是map,也就是键值对的,我们只需把字符串转成JSONObject,然后通过键名来获取对应的值。
如果比较复杂点,map里还有集合,那就是先把字符串转成JSONObject的,然后在通过键名获取到集合的字符串,然后把这个字符串转成JSONArray类型的,然后就可以对这个集合进行遍历了