只是一个开始说明:您输入请求的 JSON 不是有效的 JSON,但可以通过添加大括号轻松修复(我在答案中使用了固定的 JSON)。
我建议您以这种方式解析 JSON。声明以下类。
public class Container {
public int status;
public Results results;
@Override
public String toString() {
return "Container [status=" + status + ", results=" + results + "]";
}
}
public class Results {
public List<ResultItem> resultitems;
@Override
public String toString() {
return "Results [resultitems=" + resultitems + "]";
}
}
public class ResultItem {
String uri;
String path;
HashMap metadata;
@Override
public String toString() {
return "ResultItem [uri=" + uri + ", path=" + path + ", metadata="
+ metadata + "]";
}
}
然后调用此代码:
public class Q19684865 {
public static void main(String[] args) {
String json = " { "
+ " \"status\":\"200\", "
+ " \"results\":{ "
+ " \"resultitems\":[ "
+ " { "
+ " \"uri\":\"/document/id/e20a8dad50d91a839c50ab5f323f3df3\", "
+ " \"path\":\"Data/xyz/abcdata\", "
+ " \"metadata\":{ "
+ " \"data/category/item\":\"yahoo/post\", "
+ " \"ast_id\":\"67677\" "
+ " } "
+ " } "
+ " ] "
+ " } "
+ " } ";
Container c = new Gson().fromJson(json, Container.class);
System.out.println("this is the parsed json: " +c);
System.out.println("this is the property 'data/category/item': "+c.results.resultitems.get(0).metadata.get("data/category/item"));
}
这是结果:
this is the parsed json: Container [status=200, results=Results [resultitems=[ResultItem [uri=/document/id/e20a8dad50d91a839c50ab5f323f3df3, path=Data/xyz/abcdata, metadata={data/category/item=yahoo/post, ast_id=67677}]]]]
this is the property 'data/category/item': yahoo/post
说明:如果没有特殊需求,通常只需要 POJO,其中 POJO 字段名称对应 JSON 值的标签。但 'data/category/item' 不能是有效的 Java 标识符。所以我选择解析为一个 Map。
第二种方法是在 JSON 字符串中将“data/category/item”替换为有效的 Java 标识符,例如“data_category_item”,或者,如果您可以更改 JSON 来源,请在源处执行相同操作。