Json和Map的相互转换

由于前台框架中对数据的格式要求很高,后台返回数据一旦不符合要求,表单就可能无法渲染得到,前台就会报错,这次在社银平台中,在json和map两种类型转换中花了很多时间。
1、JSON 对象
JSON 对象在花括号中书写,对象可以包含多个名称/值对,例如:

{ "firstName":"John" , "lastName":"Doe" }

2、JSON数组
JSON 数组在方括号中书写,数组可包含多个对象,例如:
对象 “employees” 是包含三个对象的数组,每个对象代表一条关于某人(有姓和名)的记录。

{
	"employees": [
		{ "firstName":"John" , "lastName":"Doe" },
		{ "firstName":"Anna" , "lastName":"Smith" },
		{ "firstName":"Peter" , "lastName":"Jones" }
	]
}

3、Map对应Json对象表示
rtnMap 的key和value都是String类型,对其赋值表示成与上例中Json对象存储数据相同的形式(最根本的数据类型还是不一样)

Map<String, String> rtnMap = new HashMap<String, String>();
rtnMap.put("firstName","John");
rtnMap.put( "lastName", "Doe");

4、Map对应Json数组表示
首先,Json数组表示数组中包含了多个对象,则Map应初始化为Map<String, Object> rtnMap = new HashMap<String, Object>();,其value值为Object类型,完整表示代码为:

class Object{
	String firstName;
	String  lastName;
}
public static void main(String[] args){
	Object object1 =new Object();
	Object object2=new Object();
	Object object3=new Object();
	Map<String, Object> rtnMap = new HashMap<String, Object>();
	rtnMap.put("对象1",object1);
	rtnMap.put("对象1", object2);
	rtnMap.put("对象1", object3);
}

5、后台得到map之后转换成Json格式
后台的Map格式:(经过了两次new Gson().toJson(Map)操作)

Map<String, Object> selMap=commDAO.selectOne(KFSGL + "KFSGL_S", paramsMap);  //得到sql查询得到的Map
String selString = new Gson().toJson(selMap); 	//将map转换成Json字符串格式
rtnMap.put("data",selString);	//存入结果map
rtnMap.put("fhz", "1");
rtnMap.put("msg", "");
String rtnString = new Gson().toJson(rtnMap);//再次将map转换成Json字符串格式

注:只要是Map对象则经过一次new Gson().toJson(Map)操作,与前台的对应,要不然会出错,导致前台无法转换成Json格式,会出错。

String rtnString = new Gson().toJson(rtnMap);

6、前台得到rtnString 后Js如何处理
6.1 json.stringify()函数:将数组转换成 JSON 字符串;(前台传值—>后台之前处理成Json字符串形式,或者用于alert输出)
6.2 json.parse()函数:将JSON 字符串重新转换成数组;(后台—>前台获取之后处理成Json数组形式)
Service中得到的已经是字符串格式了,因此使用var result = JSON.parse(data);将其转换成数组,使用 result.data;得到其从数据库取得的值,但是这里的 result.data还是json字符串格式,因此在此使用var con = JSON.parse(content);将其转换成Json数组类型,这里的miniui渲染表单是通过Json数组进行渲染的。

注:若只有一个对象,表单中仅有一个input,用json对象即可,但很多情况下都有很多input文本框,信息不止一条,因此需要使用json数组。即:渲染识别的都是json对象,只是对象多少的问题,一个则是json对象格式,多个则是json数组格式

CFW.oAJax.doService('kfsglService.selectKfs', params, '' , function(data) {  //联系Service中的转换进行理解
	    			var result = JSON.parse(data);
	    			var content = result.data;
	    			var con = JSON.parse(content);
	    			if (result.fhz == '1') {
	    				var o = mini.decode(con);
	    				form.setData(o);
	    				form.unmask();
	    			} else {
	    				mini.alert(result.msg);
	    			}
	    		}); 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值