"json"を文字列として配信するWebサービスからのデータを処理するPHPスクリプトを作成しようとしています。問題は文字列が本当にjsonではないことです。それはJavaScriptです。特に、キーは引用符で囲まれていませんが、変数はあります。例(実際のデータははるかに長く、より複雑である):PHPで不正な形式のJSONを処理する
{desc:'User defined payload'}
php manualで説明したように、json_decode()はこの文字列を正しく解釈することができません。
私の質問は、どのように私は正常にこのような文字列をPHPで解釈できますか?
私が考えることができる唯一の解決策は、構文を修正するいくつかの正規表現を書くことですが、次に2つの問題があります。
EDIT
働いServices_JSON梨モジュールを使用してのHadvigの提案、および一般的な解決策のように見えます。モジュールをインストールすると、コードは次のようになります。
require_once 'PEAR.php';
require_once 'Services/JSON.php';
$Services_JSON = new Services_JSON();
$data = $Services_JSON->decode($malformed_json);
残念ながら、これはSLOWです。文字列全体(〜400,000文字)を解釈するには36秒以上かかりました!正規表現を使用して引用符を修正し、json_decodeを使用すると約0.04秒かかりました。ここで私が使用したものです。もちろん
// fix single quotes
$s = str_replace("'", '"', $malformed_json);
// fix unquoted keys
$valid_json = preg_replace('/([{\[,])\s*([a-zA-Z0-9_]+?):/', '$1"$2":', $s);
$data = json_decode($valid_json);
、データは任意の引用符、かっこ、またはカンマが含まれている場合、これは壊れます。
文字列を作成するプロセスを変更することはできますか? –
2つの問題がある場合は、パーザを使用する必要があるときに正規表現の使用に関する引用を知っている可能性があります) – Dan
PMV:残念ながら、いいえ – Chris