2011-09-02 70 views
1

我有一些奇怪的格式JSON字符串,這是無效的JSON,但執行有效的JavaScript。這意味着PHP json_decode,將無法正常工作。讓JSON可解析的php

{ 
    "Devices":{ 
    "Device1":"{ \"Name\"=\>\"AutoTap LDVDS\",\"ID\"=\>\"LDVDSDevice\"}" 
    } 
} 

反斜槓無效。有什麼辦法可以逃避這個字符串,所以它可以重新編碼完全一樣嗎?

編輯我不在乎解析雜亂的字符串。這阻止了我訪問其他數據。我做一個簡單的正則表達式來解析它之前剝離的JSON醜陋的字符串。但是現在我需要將結果數組重新編碼爲JSON,並且我想避免丟失這些數據。醜陋的字符串應該保持完全一樣,因爲使用這些數據的其他應用程序可能很重要。

=>來自ruby對象表示法,以防萬一您想知道。

+7

爲什麼不解決問題的根源呢? – zerkms

+0

我希望我能做到這一點。不幸的是,我不是我控制的數據。它在一個大型的企業數據庫中,我必須等待至少幾個星期才能修復。 – Keyo

+1

Ehm。 JSON完全有效。它恰好也是容器,以輔助非JSON格式。使用普通的'json_decode'和一個小型的解析器來處理包含的'=>'字符串映射。 – mario

回答

0

你可以在其上運行stripslashes,然後將該sring傳遞到json_decode

+1

...並用':'代替'=>': – adlawson

+2

Device1在這裏是一個*字符串*,並且會造成嚴重破壞。 – ZJR

1

嗯,這是那些奇怪逃脫>被殺死它:\>

我看不出有任何理由,你爲什麼不能str_replace出來的存在安全用一個簡單的:

<?php 

$code='{ 
    "Devices":{ 
    "Device1":"{ \"Name\"=\>\"AutoTap LDVDS\",\"ID\"=\>\"LDVDSDevice\"}" 
    } 
}'; 

$code=str_replace('\\>','>',$code); 

var_export(json_decode($code)); 

但隨後, 你知道你的數據域
你應該申請穀物之前,盲目應用於所有的輸入。

+0

你還需要用''替換'=>':' – johnluetke

+0

我在想這個,但是我會把它作爲一個字符串。出於某些特定原因,它可能是字符串而不是對象。 – Keyo

+0

@Keyo,我會這樣做。您隨時可以解析該字符串。 – ZJR