将Java对象转换为Java Map
我正在使用org.eclipse.jetty.util.ajax.JSON来解析JSON文本。 但是JSON.parse(string)方法产生一个Object,我需要它作为Map。 在内部,它是完全提到的类的对象。 但是,如何在不构建新对象或获取未经检查的强制转换警告的情况下将对象转换为映射?
目前,我发现只有一个解决方案没有未经检查的强制转换警告,但是构建了一个新的Map,实际上当然不是一个强制转换。
private Map getMap(String string) { HashMap result = new HashMap(); Object object = JSON.parse(string); if (object instanceof Map) { Map map = (Map)(object); for (Map.Entry entry : map.entrySet()) { String key = entry.getKey().toString(); Object value = entry.getValue(); result.put(key,value); } } return result; }
那么是否有一种方法可以在没有未经检查的投射警告的情况下正确施放它?
编译器无法保证强制转换是安全的。 既然你是保证的人,你应该使用@SuppressWarnings("unchecked")
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/SuppressWarnings.html
正如@TedHopp指出的那样,库应该被使用的方式是你将returnsnd Object
中的每个值转换为你知道它的类型(但是你必须转换你检索的每个属性)请参见这里的映射http: //download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/util/ajax/JSON.html
它提出的一点是,您要保证此JSON对象仅包含其他JSON对象(映射到对象)
因此,如果由于某种原因你传递了输入
// properties are not quoted for readability { a: 2, b : {c:3} }
尝试时,您的代码将失败并出现无效的强制转换exception
map.get("a")
所以请记住,你是那个保证你正在解析为JSON的字符串的人
如果你不能保证,你不能创建你想要的getMap函数。 你必须在知道特定对象是什么类型的地方进行转换(和@SupressWarnings
)。
对于使用JSON时的某些类型安全性,您应该了解
- http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/util/ajax/JSON.Convertor.html
- http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/util/ajax/JSON.Convertible.html
- http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/util/ajax/JSON.Generator.html
这些类允许您直接将JSON读入Java类