java – 如何使用Json-Simple从JSON解析为Map并保留键顺序
发布时间:2020-12-15 05:09:42 所属栏目:Java 来源:网络整理
导读:我正在使用Json-Simple使用JSon-Simple lib编写配置文件,但是我在将json字符串转换为map时遇到了问题. 调试我发现parse方法返回一个Map的对象!但是当我尝试直接转换为LinkedMap时,我得到一个ClassCastException: String json = aceptaDefault(); JSONParse
我正在使用Json-Simple使用JSon-Simple lib编写配置文件,但是我在将json字符串转换为map时遇到了问题.
调试我发现parse方法返回一个Map的对象!但是当我尝试直接转换为LinkedMap时,我得到一个ClassCastException: String json = aceptaDefault(); JSONParser parser = new JSONParser(); Object obj = parser.parse(json); LinkedHashMap map = (LinkedHashMap)obj; 解决方法
除非您知道底层对象实际上是LinkedHashMap(或者是扩展LinkedHashMap的类的实例),否则您不能将Map转换为LinkedHashMap.
JSON-Simple默认情况下可能会使用HashMap,故意不保留原始JSON中键的顺序.显然这个决定是出于性能原因. 但是,你很幸运!有一种解决方法 – 事实证明,在解码(解析)JSON时,您可以为解析器提供自定义ContainerFactory. http://code.google.com/p/json-simple/wiki/DecodingExamples#Example_4_-_Container_factory String json = aceptaDefault(); JSONParser parser = new JSONParser(); ContainerFactory orderedKeyFactory = new ContainerFactory() { public List creatArrayContainer() { return new LinkedList(); } public Map createObjectContainer() { return new LinkedHashMap(); } }; Object obj = parser.parse(json,orderedKeyFactory); LinkedHashMap map = (LinkedHashMap)obj; 这应该保留原始JSON中的键顺序. 如果您不关心键顺序,则不需要LinkedHashMap,您可能只是想这样做: String json = aceptaDefault(); JSONParser parser = new JSONParser(); Object obj = parser.parse(json); Map map = (Map)obj; 你仍然可能得到一个ClassCastException,但前提是json是一个列表而不是一个对象{…}. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |