2015-05-08 62 views
-2

採樣輸入字符串的鍵/值:刪除引號(單/雙)從JSON字符串

{ 「14」 合金輪(一套4) 「:」 N/A」, 「引擎」 : 「CRDI」, 「15」 鋁合金輪轂 「:」 可選 「 」其他「: 」16「 輪子 」};

有4個可能的情況:

{「 關鍵」 在這裏「:

,」Key here here「:

: 「值」 這裏 「

: 」值「 這裏」}

我需要擺脫引號的密鑰和值之間,這是造成

在PHP中使用 json_decode

無效JSON

一個可能的解決方案是使用RegEx,但我無法制定上述可能的情況。

+2

這不是一個有效的JSON字符串。嵌入式引號應該使用反斜槓進行轉義。如果你正確地創建了JSON字符串,'json_decode()'應該能夠解析它,並且你不需要做任何額外的事情。 – Barmar

+0

當引號未正確轉義時,該字符串不明確。沒有可靠的方法來判斷密鑰是否結束並且值是否開始。您不能只查找':'和',',因爲這些可能是鍵或值的一部分。 – Barmar

+0

你不應該試圖解析這個,你應該首先解決生成不良JSON的代碼。它可能是手工創建JSON,而不是像PHP中的'json_encode()'或Javascript中的'JSON.stringify()'這樣的庫函數。除非數據非常簡單,否則這是一場災難。 – Barmar

回答

3

我做了一些測試你的字符串,我想出了以下解決方案。

  1. 設置json從休息
  2. 格式除了更正鍵和值
  3. 恢復json格式化

    function repairJson($str) { 
        $search = array('":"', '","', '":{"', '"},"', '{"', '"}'); 
        $replace = array("':'", "','", "':{'", "'},'", "{'", "'}"); 
        // Distinct json default formatting 
        $str = str_replace($search, $replace, $str); 
        // Find and replace all " that are not yet escaped 
        $str = preg_replace('/([^\\\])"/', '${1}\"', $str); 
        // Restore json default formatting 
        $str = str_replace($replace, $search, $str); 
        return $str; 
    }