json前后交互
使用 gson 处理
使用XMLHttpRequest方式
js内部代码:
//定义json数据
var userjson={
"username" : "zhangsan"
};
//将userjson转字符串
var json=JSON.stringify(userjson);
//定义XMLHttpRequest对象
var myajax=new XMLHttpRequest();
//打开连接 请求方式 路径 异步或同步
myajax.open("post","../Test",true);
//设置请求头
myajax.setRequestHeader('content-type', 'application/json');
//发送数据
myajax.send(json);
servlet服务器端处理,用的gson:
//利用流的方式进行读取请求
BufferedReader reader = request.getReader();
StringBuffer sb =new StringBuffer();
String line=null;
while((line=reader.readLine())!=null) {
sb.append(line);
}
//创建gson对象
Gson gson =new Gson();
//将数据与类绑定,或者将字符串进行截取用map集合添加
Uit fromJson = gson.fromJson(sb.toString(), Uit.class);
//显示数据
System.out.println(fromJson.getU_name());
servlet服务器用json写回前端
Map<String, String> map=new HashMap<String, String>();
map.put("name", "zhangsan1");
//将map转化为json字符串
String json = gson.toJson(map);
System.out.println(json);
//写回
response.getWriter().print(json);
js读取servlet写回的数据:
onload:响应完成
myajax.onload=function (){
//将字符串转为json对象
var json=eval("("+myajax.responseText+")");
//显示
alert(json.name);
}
注意:遇到多层的需要一层一层转,最后只剩一层才能点
数据:
{"key0":{"d_id":-1,"d_name":"","d_tel":-1,"d_massage":"","d_up":-1}}
代码:
myajax.onload=function (){
var obj=eval("("+myajax.responseText+")");
//拨开了第一层
var json=eval("("+JSON.stringify(obj.key0)+")");
alert(json.d_id);
}
复杂点的:
{"key1":{"d_id":2345,"d_name":"cc","d_tel":1111,"d_massage":"无","d_up":0},"key2":{"d_id":23455,"d_name":"bb","d_tel":23456,"d_massage":"无","d_up":0},"key0":{"d_id":1234,"d_name":"aa","d_tel":123456,"d_massage":"无","d_up":0}}
var obj=eval("("+myajax.responseText+")");
for(var i in obj){
var json=eval("("+JSON.stringify(obj[i])+")");
alert(json.d_id);
数组的话[]可以直接用eval转化不需要加()
使用 fastjson 处理
java字符串转二维数组,二维数组转List<List
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.TypeReference;
public static void main(String[] args) {
//定义二维数组字符串str1
String str1 ="[[\"1\",\"2\",\"3\"],[\"12\",\"3\",\"4\"]]";
//定义二维数组字符串str2
String str2 ="[[1,2,3],[12,3,4]]";
//将str1转换成二维数组parse1
String[][] parse1 = JSON.parseObject(str1, String[][].class);
//将str2转换成二维数组parse2
String[][] parse2 = JSON.parseObject(str2, String[][].class);
//将二维数组parse1转换为list
List<List<String>> lists1 = JSON.parseObject(JSON.toJSONString(parse1),new TypeReference<List<List<String>>>(){});
//将二维数组parse2转换为list
List<List<String>> lists2 = JSON.parseObject(JSON.toJSONString(parse1),new TypeReference<List<List<String>>>(){});
//将list1转换为二维数组
String[][] parse3 = JSON.parseObject(JSON.toJSONString(lists1), String[][].class);
//将list2转换为二维数组
String[][] parse4 = JSON.parseObject(JSON.toJSONString(lists2), String[][].class);
//打印数据
System.out.println(JSON.toJSONString(parse1));
System.out.println(JSON.toJSONString(parse2));
System.out.println(JSON.toJSONString(lists1));
System.out.println(JSON.toJSONString(lists2));
System.out.println(JSON.toJSONString(parse3));
System.out.println(JSON.toJSONString(parse4));
}