1

重複の可能性:
PHP: 引用符内のエスケープされた引用符を無視する正規表現 PHP
でフォーマットが不適切な JSON を修正するには?

文字通り次のようなデータがあります。

"manager1": "Richard "Dick" Smith, MD, MBA",

ただし、JSON で動作させるには、文字通り次のようにする必要があります。

"manager1": "Richard \"Dick\" Smith, MD, MBA",

注: 違いは、Dick のニックネームの内部二重引用符のバックスラッシュのみであり、文字列の残りの部分は変更されません。

コンマで区切られた資格情報 (MD、MBA) の処理に問題があります。文字列の残りの部分を保持しながら、内部の二重引用符をバックスラッシュするだけで、正規表現を使用してPHPでこれを行うにはどうすればよいですか? ありがとう!

これは、PHP で正しくフォーマットされていない JSON を修正する方法の複製ではありません 。 そのルーチンは資格情報からの追加のコンマを処理できないためです。

4

2 に答える 2

0

私はあなたがそのようにすることを提案します:

//suppose your data is in the file named "data.txt". We read it in a variable

$fh = fopen("data.txt");
$res = '';
while (($line = fgets($fh)) !== false) {
   $txt = explode(': ', $line);
   $txt[1] = trim($txt[1], '",'); 
   //now $txt[1] holds the the data with internal quotes but without external quotes
   $txt[1] = preg_replace('@"@', '\"',  $txt[1]);
   //put leading and ending quotes back and join everything back together
   $txt[1] = '"'.$txt[1].'",';
   $res .= implode(': ', $txt);

}

fclose($fh);

//now echo the result with the all internal quotes escaped
echo $res;

上記のようなものがあなたのために働くはずだと思います。

于 2012-11-06T15:16:50.090 に答える
0

次の正規表現パターン:

 /^\s+"[a-z0-9_"]+": "([^"]*".*)",?$/mi

私のためにそれをしました。PHP で無効な JSON を修正する方法を参照してください。

于 2012-11-07T15:29:46.297 に答える