当前位置: 代码迷 >> Java Web开发 >> 包含自定义类的Map怎么转换成JSON
  详细解决方案

包含自定义类的Map怎么转换成JSON

热度:108   发布时间:2016-04-16 22:16:56.0
包含自定义类的Map如何转换成JSON?
比如Map<SomeClass, Integer>如何转换成JSON?
SomeClass为自定义类,实际对应关系比如 MAP<商品,数量>,
JSON-lib 整了半天,没整出来,
覆写toString好像也不行。
谢谢了!
------解决方案--------------------
JSONObject json = JSONObejct.fromObject(map)
上面的方法转出来的结果为map的key.toString()和value.toString() 的结果对。
SomeClass 是你的自定义类,你没有重写toString方法,默认调用的是Object类的toString方法。
你重写下SomeClass 的toString方法,输出你想要的结果,然后,转出来的JSON就不再是内存地址了。
------解决方案--------------------
引用:
这个我了解过,Map<String,Object> 直接可以转换成JSONObject.fromJSONObject 可以直接转换成json,
问题是 现在是Map<Object,String> 

这里的Map<Object,String> 是自己放进去的数据还是从哪里直接拿到的?
刚试了下key位直接放object的情况,报出 Caused by: java.lang.ClassCastException: JSON keys must be strings.
json的key必须是string类型的,所以楼主自己重写toString方法吧。
或者就是自己写个方法将map转json吧,这样也可以拿到自己想要的数据格式。
------解决方案--------------------
这个是你map对象结构的问题,你用一个复杂对象做键值,很不方便生成json对象,因为json对象的键名都是字符串。

建议调整map结构,如果SomeClass有唯一标识符比如ID啥的,就用标识符做键名,Map(Integer, Integer),如果SomeClass包含了数量属性,干脆Map(Integer, SomeClass)


SomeClass:
    int id;int count;String name;

SomeClass A(1,100,"商品A")
SomeClass B(2,50,"商品B")

Map(Integer, SomeClass) map
map.put(A.id, A)
map.put(B.id, B)

这个map就好生成json字符串了
{"1":{id:1, count:100, name:"商品A"}, "2":{id:2, count:50, name:"商品B"}}
  相关解决方案