【发布时间】:2018-04-06 15:37:56
【问题描述】:
我正在尝试使用 Java Jackson ObjectMapper 来解析具有动态键的三级 JSON 对象结构。我尝试了以下方法:
public class AssetsPushManifest {
private Map<String, List<Asset>> manifest = new HashMap<>();
public void addPushManifest(Resource manifestResource) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Map<String, Map<String, Asset>> manifestData = mapper.readValue(manifestResource.getInputStream(), new TypeReference<Map<String, Map<String, Asset>>>() {});
for (String requestedPathName : manifestData.keySet()) {
if (!this.manifest.containsKey(requestedPathName)) {
this.manifest.put(requestedPathName, new LinkedList());
}
List<Asset> requestedPath = this.manifest.get(requestedPathName);
for (String servePath : manifestData.get(requestedPathName).keySet()) {
Asset asset = manifestData.get(requestedPathName).get(servePath);
asset.path = servePath;
requestedPath.add(asset);
}
}
...
}
public class Asset {
public String path;
public String type;
public Integer weight;
}
}
解析这个:
{
"theme/test-theme/index.html": {
"theme/test-theme/somestyling.css": {
"type": "document",
"weight": 1
}
}
}
但它不起作用,为什么哦,为什么?是不是层次太多了? (这里还是 Java 初学者)
最终目标是将上面的几个 JSON 结构解析成一个类似 Map 的结构>所以任何其他方法也可以。
【问题讨论】:
-
输出是什么?
-
Asset 对象不能正确表示 JSON 文件
-
是的,它有一个额外的属性,路径,这可能是原因吗?我想我可以只使用该类,即使它有一个额外的属性,然后从“父”键设置该属性。
-
@Guts 的目标只是像示例一样读取 x 数量的清单 JSON,并创建一个像 Map
> 这样的对象结构,稍后将用于 HTTP2 服务器推送响应。当请求单个 HTML 页面时,它还应该将所有相关资源推送到同一连接中。但首先我需要从 Polymer 框架生成的格式(如示例 JSON)中读取清单
标签: java json jackson objectmapper