fastjson为map生成json字符串的问题
时间: 2019-03-27来源:博客园
前景提要
fastjson为map生成json字符串的问题
0 悬赏园豆: 5 [待解决问题] map的键、值都是自定义类型,请问有没有什么json库可以处理这样的map啊 JSON Map darknessplus | 初学一级 | 园豆: 141
提问于:2019-03-27 15:29 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(1) 0 fastjson、gson、jackson这几种json库都支持呀,比如定义一个Map<Person,Teacher>,put数据后直接使用json库转换即可,不过这种方式好像很少见。 List subjects = new ArrayList<>(); subjects.add("math"); subjects.add("chinese"); subjects.add("english"); Map score = new HashMap<>(); score.put("math", 99); score.put("chinese", 100); score.put("english", 59); // 创建一个对象 Person person = new Person(); person.setName("张三"); person.setAge(99); person.setWage(99999.98); person.setGender(true); person.setSubjects(subjects); person.setScore(score); Person person2 = new Person(); person2.setName("李四"); person2.setAge(99); person2.setWage(99999.98); person2.setGender(true); person2.setSubjects(subjects); person2.setScore(score); Map m = new HashMap<>(); m.put(person, "11111111"); m.put(person2, "2222222"); String jsonStr = JSON.toJSONString(m, true); System.out.println(jsonStr); /** { { "age":99, "gender":true, "name":"张三", "score":{ "chinese":100, "english":59, "math":99 }, "subjects":[ "math", "chinese", "english" ], "wage":99999.98 }:"11111111", { "age":99, "gender":true, "name":"李四", "score":{"$ref":"$.null.score"}, "subjects":[ "math", "chinese", "english" ], "wage":99999.98 }:"2222222" } */ 寻觅beyond | 园豆:584 (小虾三级) | 2019-03-30 11:11 不对吧,json根本解析不出来啊 支持( 0 ) 反对( 0 ) darknessplus | 园豆:141 (初学一级) | 2019-03-30 22:27 @darknessplus:
解析就算了,你自己慢慢搞吧,你倒是可以了解一下json的解析策略。
不过我有点纳闷,你在哪儿见过json中的key是基本数据类型以外的值??自定义数据类型就是class type了呗,这不是把问题复杂化吗? 支持( 0 ) 反对( 0 ) 寻觅beyond | 园豆:584 (小虾三级) | 2019-04-01 21:20 @寻觅beyond: 其实问题就在解析啊,有没有能把map一键转化成js能解析的json字符串的工具,你上面生成的json字符串前端根本无法解析,起码要变成这样: { "data": [ { "age": 99, "gender": true, "name": "张三", "score": [ { "subject": "chinese", "score": 100 }, { "subject": "english", "score": 59 }, { "subject": "math", "score": 59 } ], "wage": 99999.98, "teacher": "11111" }, { "age": 99, "gender": true, "name": "李四", "score": [ { "subject": "chinese", "score": 100 }, { "subject": "english", "score": 59 }, { "subject": "math", "score": 59 } ], "wage": 99999.98, "teacher": "22222" } ] } 支持( 0 ) 反对( 0 ) darknessplus | 园豆:141 (初学一级) | 2019-04-01 21:41 @darknessplus:
前端解析json的时候,key的类型是string类型,不能为对象类型;
所以后端返回给前端的json数据中,key都应该是String类型,所以后端在生成json串的时候,就不应该将object类型的值作为key值,否则前端是无法解析的。
你倒是可以写一个工具类:你可以创建一个map中key为object类型的json,然而你并不将该json返回给前端,而是使用自定义的工具类,将前面创建json的原始数据,重新生成一个key为String类型的json串,然后再返回给前端,前端就是可以解析的了 支持( 0 ) 反对( 0 ) 寻觅beyond | 园豆:584 (小虾三级) | 2019-04-02 10:41 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行