Title

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 >,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));
}

参考链接:
https://www.jianshu.com/p/61cf2439f6d9

posted @ 2020-01-31 20:53  快乐小洋人  阅读(218)  评论(0编辑  收藏  举报