2016-12-13 11 views
0

POST経由でJSONデータをPHPバックエンドに送信しています(これ以上アクセスできません)。私は、データのエクスポートを行うと、それは次のようになりますので、破損したJSONを復元するためのRegex

、JSONはすべて引用符が欠落しています。

[ 
    { key: any text with spaces, emptykey: , foo: 0}, 
    {...} 
] 

私は、これは簡単に修正することができると思う - 私の文字列のどれにカンマが含まれていないからです。

は、だから私は、1つのに全体JSON-アレイを分割することができ引き受ける: は、(1)により、オブジェクト{..} (2)カンマ,

によるキー/値のペアで、私は簡単な正規表現でこれを行うだろうか-置換?

+0

はこれを確認してください:https://regex101.com/r/:https://regex101.com/r/jqK12N/3 – MYGz

答えて

2

実際にはシンプルネストされたカスケード正規表現が必要なため、正規表現置換ではありません。

これは仕事(だけでなく、以下の@Mohammadユスフガジのソリューションを参照)します

var src = '[{ key: any text with spaces, emptykey: , foo: 0}, { key2: other text with spaces, emptykey2: , foo2: 2},]'; 
 

 
var lookforObj = /\{([^}]*)\}/g; 
 
function objRepl(match, obj) { 
 
    return '{' + obj.replace(lookforPair, pairReplace) + '}'; 
 
} 
 
var lookforPair = /\s*([^,]+)\s*(,?)\s*/g; 
 
function pairReplace(match, pair, comma) { 
 
    return pair.replace(lookforKey, keyReplace) + (comma ? ', ' : ''); 
 
} 
 

 
var lookforKey = /\s*([^:]+):\s*(.*)/; 
 
function keyReplace(match, key, value) { 
 
    return '"' + key + '": "' + value + '"'; 
 
} 
 

 
console.log(src.replace(lookforObj, objRepl));

EDIT:@Mohammadユスフガジのソリューションは、はるかに簡単で、うまく機能します。
唯一の欠点は、JSON形式のルールに関して「正規化」スペースとコンマを処理しないことです。ここで

は、それは次のようになります。

var src = '[{ key: any text with spaces, emptykey: , foo: 0}, { key2: other text with spaces, emptykey2: , foo2: 2},]'; 
 

 
console.log(src.replace(/(\w+):(\s*)(.*?)(,|})/g, '"$1":$2"$3"$4'));

+0

はこれをチェックjqK12N/3。この正規表現を使用して答えを変更することができます。 – MYGz

+0

これはきちんとしている:ありがとう! @モハマドYusuf Ghaziあなたの正規表現は私のために動作しませんでした – ManuKaracho

+0

@モハマドYusufGhaziああはい:これはかなりエレガントです。私自身の答えよりもシンプルなので、私はそれを "盗んだり"したくありません!代わりに、_you_はこれであなた自身の答えを書くべきです。 – cFreed

関連する問題