JSON_encoded String to Java JSONObject

时间:2013-01-08 14:17:38

标签: java android json

我有来自服务器的JSON响应。它看起来像这样:

"json_key" : { 
     "key_1" : value,
     "key_2" : json_object, 
     "key_3" : json_object
}

问题是其中一个json对象带有特定的编码

"object_key": "a:4:{s:6:\"ITEM_KEY_1\";s:2:\"ITEM_VALUE_1\";s:6:\"ITEM_KEY_2\";s:2:\"ITEM_VALUE+2\";s:8:\"ITEM_KEY_3\";s:8:\"ITEM_VALUE_3\";s:8:\"ITEM_KEY_4\";s:5:\"ITEM_VALUE_4\";}"

据我所知,这是一个json_encoded字符串。如何将其转换为java JSONObject? 提出这个问题是因为当我尝试通常的方式JSONObject json = new JSONObject(jsonStr);时,它会抛出一个JSONException - cant convert String to JSONObject

修改 每个验证工具都将对象值视为字符串,而不是JSON。

2 个答案:

答案 0 :(得分:1)

问题在于 "object_key": "a:4: s:6:\"ITEM_KEY_1\";s:2:\"ITEM_VALUE_1\";s:6:\"ITEM_KEY_2\";s:2:\"ITEM_VALUE+2\";s:8:\"ITEM_KEY_3\";s:8:\"ITEM_VALUE_3\";s:8:\"ITEM_KEY_4\";s:5:\"ITEM_VALUE_4\";}"

是无效的JSON,因此当您尝试解析它时会出错。 字符串中的第一个错误来自:"object_key": "a: 4:,但我猜你希望整个字符串都在object_key下面

AFAIK,JSON不能忽略值中的':',并且它没有逃脱。如果想法不是对象键包含所有这些,那么JSON需要重组直到它有效。

作为一种工具,使用http://jsonlint.com/,它允许您检查JSON是否有效

RE:Yami的编辑 - 我担心您提供给我们的JSON示例无效,如我列出的网站所示。有关此问题的更多帮助,您需要将私有JSON数据更改为与您在其中一个站点验证JSON时遇到的结果相同的结果,否则我们可以做很多事情来帮助尝试并验证它

答案 1 :(得分:1)

使用serialized-php-parser lib找到了一个很好的解决方案:

JSONObject jsonObject = new JSONObject(response);
String theNonReadableJson = jsonObject.getString("key");

SerializedPhpParser serializedPhpParser = new SerializedPhpParser(
                        theNonReadableJson);
Object serializedObject = serializedPhpParser.parse();

JSONObject readableJson = new JSONObject(serializedObject.toString());

在序列化之后,JSON对象可以像魅力一样进行分析。

我要感谢Loris给我一个PHP serialize()结果的想法,感谢Matt Taylor试图帮我解决这个问题。