[英]Java Jackson: parse three level JSON dynamic object structure
我正在尝试使用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>之类的结构,因此任何其他实现此目的的方法也都可以。
我将以另一种方式解决此问题:将json解析为地图:如果您给Jackson提供地图作为类型引用,它将把JSON反序列化为多级地图:
`Map<String, Object> manifestData = mapper.readValue(manifestResource.getInputStream(), Map.class);`
现在json解析障碍已经过去,通过查询地图构造Asset
实例更加容易。 我可以通过向Asset
类添加一个构造函数来做到这一点:
public Asset(Map<String, Object> manifestData) {
Map<String, Object> assetData = (Map<String, Object>)manifestData.values().iterator().next(); // get the single value of the map
this.path = assetData.keySet().iterator().next();
this.type = assetData.get("type");
this.weight = assetData.get("weight");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.