2

我有来自服务器的 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。

4

2 回答 2

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 是否有效

回复:Yami 的编辑——恐怕你给我们的 JSON 样本是无效的,如我列出的网站所示。有关此问题的更多帮助,您需要将私有 JSON 数据更改为产生与您在这些站点之一验证 JSON 时所遇到的结果相同的结果,否则我们无能为力帮助尝试并验证它

于 2013-01-08T14:26:53.927 回答
1

使用serialized-php-parser库找到了一个不错的解决方案:

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试图帮助我解决这个问题。

于 2013-01-08T15:50:02.663 回答