在Java中将JsonString解析为JsonObject

时间:2013-12-23 15:26:54

标签: java json

我有以下字符串:

{
    "response": true,
    "model_original_id": "5acea0b5:1431fde5d6e:-7fff",
    "model_new_id": 500568,
    "model_new_version": 1,
    "reload": true,
    "idsModelProperties": [{
        "key": "creation_date",
        "value": "2013-12-23"
    },
    {
        "key": "state",
        "value": 1,
        "displayValue": "Analisi"
    }],
    "idsNodes": [],
    "idsConnectors": [],
    "idsNodesProperties": []
}

我需要将其解析为JSONObject。我试着用 quickjson但它在尝试解析一个emty字符串时给了我一个异常。 这就是我的尝试:

JsonParserFactory factory=JsonParserFactory.getInstance();
JSONParser parser=factory.newJsonParser();
Map jsonData=parser.parseJson(response_output);

例外: 线程“main”中的异常com.json.exceptions.JSONParsingException:@ Key-Hierarchy :: root / idsNodes [0] / @Key ::值是预期的但是找到空... @ Position :: 256

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我会给你一个替代方案,因为看起来quick-json在解析空的json数组时遇到了麻烦。查看Gson

String json = "{ \"response\": true, \"model_original_id\": \"5acea0b5:1431fde5d6e:-7fff\", \"model_new_id\": 500568, \"model_new_version\": 1, \"reload\": true, \"idsModelProperties\": [{ \"key\": \"creation_date\", \"value\": \"2013-12-23\" }, { \"key\": \"state\", \"value\": 1, \"displayValue\": \"Analisi\" }], \"idsNodes\": [], \"idsConnectors\": [], \"idsNodesProperties\": []}";
JsonParser jsonParser = new JsonParser();
JsonElement jsonElement = jsonParser.parse(json);

JsonElement是一个抽象类。其子类型为JsonArrayJsonNullJsonObjectJsonPrimitive。在上面的示例中,实际实例是JsonObject,因为您的json String是一个json对象。它内部包含LinkedTreeMap,但您实际上并不需要访问它。您可以直接在JsonElement上访问不同的json对象。

答案 1 :(得分:2)

虽然问题的作者已经接受了答案,但其他人可能正在搜索相同的问题。我在https://code.google.com/p/quick-json/issues/detail?id=11

中使用quick-json解决了我所知道的问题