1

我有需要使用 Google Gson 库在 Java 对象中转换的 JSON 字符串。由于以下 JSON 字符串中的正斜杠,我被困在转换中。

{
    "status":"200",
    "results":{
    "resultitems":[
        {
            "uri":"/document/id/e20a8dad50d91a839c50ab5f323f3df3",
            "path":"Data/xyz/abcdata",
            "metadata":{
                "data/category/item":"yahoo/post",
                "ast_id":"67677"
            }
        }
    ] 
}

事实上,对于Data/category/item,我得到一个空值。我怎样才能正确解析它?

4

1 回答 1

1

只是一个开始说明:您输入请求的 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 来源,请在源处执行相同操作。

于 2013-10-30T20:49:24.863 回答