java的Map与前端json对象的交互 |
您所在的位置:网站首页 › 后端向前端传递数据是什么 › java的Map与前端json对象的交互 |
一、后端java程序中的应用
1、Map转换成JSON Map map = new HashMap(); map.put("a","aaa"); map.put("b","bbb"); map.put("c","ccc"); String json=JSON.toJSONString(map); System.out.println(json);//输出{"a":"aaa","b":"bbb","c":"ccc"} 2、JSON转换成Map Map map1 = JSON.parseObject(json); System.out.println(map1.get("a")); for (Object mapData : map.entrySet()) { Map.Entry entry = (Map.Entry)mapData; System.out.println(entry.getKey()+"--->"+entry.getValue()); } /*输出 b--->bbb c--->ccc a--->aaa */ 3、map中含有对象Map -> JSON //Map -> JSON Map map = new HashMap(); map.put("a",new Bar()); map.put("b",new Bar()); map.put("c",new Bar()); String json = JSON.toJSONString(map,true); System.out.println(json); /* 输出{ "a":{ "barAge":383687382, "barDate":1494945882018, "barName":"name_1689176802" }, "b":{ "barAge":-100528778, "barDate":1494945882018, "barName":"name_-878176366" }, "c":{ "barAge":-344075192, "barDate":1494945882018, "barName":"name_-1710740534" } } */ 二、toJSONString(fastjson)的json字符串的排序问题这一小节的原文链接:https://blog.csdn.net/u011410529/article/details/50235883 fastjson在封装成json的时候会自动按照属性名称排序,也就是abcd…的顺序排序。 但是很多时候,我们可能需要json有一定的顺序,且按照我们的顺序,好了,让我们来看看如何。 首先:写一个实体类,用于转化成json用 package com.dzy.fastjson; public class Letter { private Long id; private String name; private String app; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getApp() { return app; } public void setApp(String app) { this.app = app; } } 然后我们如果不给任何排序规则的时候测试: package com.dzy.fastjson; 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 JsonShunxu{ public static void main(String[] args) { List list=new ArrayList(); JSONArray js=new JSONArray(); Letter le_solo=new Letter(); le_solo.setId(1l); le_solo.setName("小明"); le_solo.setApp("my APP"); System.out.println(JSON.toJSONString(le_solo)); System.out.println("------------------------------"); for (int i = 0; i < 5; i++) { le_solo.setId(3l); le_solo.setName("小明"+i); le_solo.setApp("my APP"+i); list.add(le_solo); } System.out.println(JSON.toJSONString(list)); } } 我们看到的顺序是按照a-》i-》n的顺序来的,但是不符合我们的要求
这里根据fastjson的官方文档发现,需要改变JSONField参数 下面给出3种方法: 1、可以通过ordinal指定字段的顺序。这个特性需要1.1.42以上版本。
如果上面一种方法不行,或者没有达到你的要求,那么下面的也可以了 也可以人为改变json串的名称 @JSONField(name="b") private Long id; @JSONField(name="c") private String name; @JSONField(name="a") private String app; 这样排序出来就是这样的效果
三、以ajax传递回前端后,前端可能会用到json的解析问题; 1、传递回前端直接已经被解析为json对象时,不需要解析,可以直接用。 比如下例中的data $.ajax({ type: "post", url: "${ctx}/sys/user/getEnablePoint", async: false, dataType: "json", success: function (data) { if(!$.isEmptyObject(data)) { if(data.isGroup == "True") { isAll = "True"; } else if(data.isGroup == "False") { isAll = "False"; farmList = data.lfarmIds; } } }, error: function(data) { alert("未获取到当前登录用户的信息!"); } })
2、需要解析时,推荐方法: JSON.parse() 特点:主流,兼容性好,推荐 格式: JSON.parse(text [, reviver])参数 text 必需。 一个有效的 JSON 字符串。 reviver 可选。 一个转换结果的函数。 将为对象的每个成员调用此函数。 如果成员包含嵌套对象,则先于父对象转换嵌套对象。 对于每个成员,会发生以下情况: 如果 reviver 返回一个有效值,则成员值将替换为转换后的值。 如果 reviver 返回它接收的相同值,则不修改成员值。 如果 reviver 返回 null 或 undefined,则删除成员。 返回值 一个对象或数组。 异常 以下示例使用 JSON.parse 将 JSON 字符串转换成对象。 var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}'; var contact = JSON.parse(jsontext); document.write(contact.surname + ", " + contact.firstname); // Output: Aaberg, Jesper
备注:json.stringify()和json.parse()的区别 json.stringfy()将对象、数组转换成字符串;json.parse()将字符串转成json对象。
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |