2017-09-01 9 views
0

次のJSON(無効)を文字列として使用しています。私はそれを解析し、内部の価値を得る必要があります。私はたくさん試しましたが、結果は得られませんでした。文字列をJSONに変換できませんでした。 JSONを有効な文字列に変換し、PHPでJSONを解析します。

$sJson = '{"Place":"MyStore","PurchaseID":"IND.1234-5678-9012-34567","details":"{\"json\":\"{\\\"PurchaseID\\\":\\\"IND.1234-5678-9012-34567\\\",\\\"categoryname\\\":\\\"smartpack\\\",\\\"productname\\\":\\\"bitcoinpack1\\\",\\\"purchaseTime\\\":1504256011148,\\\"purchaseState\\\":\\\"Success\\\",\\\"UniqueToken\\\":\\\"jbbefjifdkpdpajfkomckoof.AO-J1OzEdsZX17M5pAvedDh1Ep_WwlOKamMQN_3O89bRbAPX-uoqPpTJf8EdNcjMhCK1dptGaWReUCSS9JGCJuh6GlAT0l11mkUddo_uJ4YOe8ezYxlmDQ8\\\"}\",\"currentvalue\":\"S270U2J3XF\\/+XnC1ocPp0d\\/Kwf\\/4B\\/\\/tT7urbDn6F+\\/D8j7VD1t8qqwevtKDnAafAtvocPg4Eevkf\\/GZKl1YOgUYyuY63nyekz7GRDuIKVXAZ+iZtPAbwCuwZplUQHaVA\\/EBMjYpPQM0EFtp2WuX\\/Tx9nTnFCtU+gAK4Rg0zLvQNKSJx5WfqhK7wf0wHTTYviTkB\\/pETnkV22oQDIZH9\\/Fy1FXltC7FXHXoMcxtGvkgPSEFOnms4HumjUQ5PtQUbxh\\/oirQeROCAhkO+WKX9WO3bCKjru1uuxspTLCNGJEKAezi2GEBcpFGjq4iS5N7SfO5BOF76\\/joLe3B7OemJNw==\"}"}'; 

    $sJson = json_encode($sJson,JSON_UNESCAPED_SLASHES); 
    $json_array = (array) json_decode($sJson,true); 
    $newjson=preg_replace('/.+?({.+}).+/','$1',$json_array); 
    var_dump($newjson); 
    exit; 

結果$newjsonはJSONオブジェクトとして返していない、それだけで文字列として与えます。

文字列ではなくJSONオブジェクトが必要です。

特定のJSONでは、jsonの値は、"で始まる文字列(有効なJSON内)です。

これを削除する必要があります。

+0

http://benalman.com/news/2010/03/theres-no-suchthing-as-a-json/ – Quentin

+1

なぜあなたはすでにエンコードしているものを 'json_encode()'しますか? 'json_decode()'を意味しないのですか?そして、私はこの関数の引数と結果に異なる変数名を使用します。 –

+0

あなたが持っているものは無効なJSONです... – Salketer

答えて

1

文字列がほとんど有効なJSONで、あなただけのいくつかのことを微調整する必要があります。

$string = str_replace('\\"', '"', $string); 

が続いて括弧の一部が引用されている(私はこれを2回実行する必要がありました):それが終わった後は

$string = str_replace('"{', '{', $string); 
$string = str_replace('}"', '}', $string); 

が、私は正常にJSONをデコードすることができました。これはおそらくpreg_replaceでより速く行うことができますが、私はregexesを吸います。

+0

私もそれを試みました。しかし、結果を得ることができませんでした。 – Gunaseelan

+0

それは私のために働いたhttp://sandbox.onlinephpfunctions.com/code/a1102f1d2a3f017404ee2b771e80d5a444a7c17e – aynber

2

json_encodeはPHPのデータ構造をとり、それをJSONの文字列に変換します。

逆の場合は、json_decodeが必要です。 "\\"のすべてを置き換える、

まず:

+0

与えられた文字列は有効ではありません。オンラインjsonの編集者に親切に確認してください。 – Gunaseelan

関連する問題