我正在使用 Oracle OPAM,它有一个 REST API,它有这样的方法
{
"Target Collection":[
{
"target":{
"uri":"https:\/\/opam_server_host:opam_ssl_port\/opam\/target\
/9bbcbbb087174ad1900ea691a2573b61",
"type":"ldap",
"name":"person1-ldap",
"host":"opam_server_host",
"domain":"berkeley"
"description" : "Ldap target"
}
},
{
"target":{
"uri":"https:\/\/opam_server_host:opam_ssl_port\/opam\/target\
/ac246a162ce948c7b1cdcc17dfc92c15",
"type":"ldap",
"name":"person1-ldap2",
"host":"opam_server_host:opam_ssl_port",
"domain":"berkeley"
"description" : "Ldap target"
}
}
]
}
我正在使用 FlexJSON 反序列化这些实体。如果可以的话,我会使用 Apache CXF 为我生成 bean,但问题是 WADL 处于无效的 https 证书 + 基本身份验证下,并且让 wadl2java 在这些条件下工作需要比我更多的时间喜欢花钱(太糟糕了,它不是 WSDL,所以我可以从 eclipse 内部快速轻松地创建存根)。
所以我使用这种繁琐的方法和 flexjson 来解析这个 REST API
JSONDeserializer<Map<String,List<Map<String,Map<String,String>>>>> json = new JSONDeserializer<>();
Map<String,List<Map<String,Map<String,String>>>> targetCollection = json.deserialize(new InputStreamReader(content));
List<Map<String,Map<String,String>>> col = targetCollection.get("Target Collection"); Map<String,Map<String,String>> keyVal = col.get(0);
Map<String,String> targetVal = keyVal.get("target");
System.out.println(targetVal);
这显然有效,但它有很多括号让我想起 LISP。
如果我们可以只使用 POJO 会更好(如果我可以通过一些 GUI 工具自动生成,那就更好了,但我知道我要求太多,我们生活在 2014 年)。
我知道这里有一些关于如何映射属性的文档:http: //flexjson.sourceforge.net/#Deserialization但我真的希望他们有一些真正复杂的样本(包括 JSON - 解释如何反序列化有什么用呢?文档中的 JSON 示例?)
这个问题显然不是新问题,但似乎1、2或3等相关问题也在等待答案。
(PS 除了这个似乎有一些我可以使用的信息)
所以我的问题是:如何将这个带有 FlexJSON 的 JSON 解析成一个不仅由 Maps 组成的结构?