2

サーバーからのJSON応答があります。どういうわけか次のようになります。

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

問題は、jsonオブジェクトの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_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 の下に配置する必要があると推測しています

私の知る限り、JSON は値内の ':' を無視できず、そのためのエスケープはありません。オブジェクトキーにそのすべてが含まれているという考えではない場合、JSON は有効になるまで再構築する必要があります。

ツールとしてhttp://jsonlint.com/を使用すると、JSON が有効であることを確認できます。

RE: Yami の編集 - 残念ながら、私がリストした Web サイトに示されているように、あなたが提供した JSON サンプルは無効です。この問題についてさらに支援が必要な場合は、プライベート JSON データを、JSON がこれらのサイトのいずれかによって検証されたときに経験しているものと同じ結果を生成するものに変更する必要があります。そしてそれを検証する

于 2013-01-08T14:26:53.927 に答える
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 オブジェクトはチャームのように解析できます。

PHP serialize() の結果のアイデアをくれたLorisと、この問題の解決を手伝ってくれたMatt Taylorに感謝します。

于 2013-01-08T15:50:02.663 に答える