2017-09-01 47 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-such-thing-as-a-json/ – Quentin

+1

爲什麼你'json_encode()'已經編碼的東西?你不是指'json_decode()'嗎?我將使用不同的變量名稱作爲這個函數的參數和結果。 –

+0

你有什麼是無效的JSON ... – Salketer

回答

1

的字符串是大多有效的JSON,你只需要調整的幾件事情:

首先,"更換所有\\"的。 (我不得不兩次運行此)

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

那麼一些大括號的被引用:

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

這項工作完成,我能成功解碼的JSON。這可能可以用preg_replace更快地完成,但我吸取正則表達式。

+0

我也試過。但無法得到結果。 – Gunaseelan

+0

它爲我http://sandbox.onlinephpfunctions.com/code/a1102f1d2a3f017404ee2b771e80d5a444a7c17e – aynber

2

json_encode需要PHP數據結構,並將其轉化JSON的字符串。

您需要json_decode走另一條路。

+0

鑑於字符串不是有效的。請檢查在線json編輯。 – Gunaseelan