我有来自服务器的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。
答案 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试图帮我解决这个问题。