0

"以下のJSON文字列の正規表現を使用して、二重引用符内の二重引用符()をエスケープするにはどうすればよいですか?

[{
     "LDAP_ID":"a",
     "LAC_NO":"1153274",
     "ACTION":"VBE",
     "DATE_OF_ACTION":"06-01-2006 AM 12:00:00",
     "RESPONSE":"DPP",
     "DEF_OBSERV":"M",
     "REMARK":"visited b"         s emp & rcd 1 emi",
     "OPR_ID":"FCTV1",
     "ACTION_TO_BE":"",
     "ACTION_TO_BE_DT":"",
     "AMOUNT_TOBECHG":"",
     "DELEGATED_TO":"",
     "BRANCH_CODE":"100",
     "DISP_DATE_OF_ACTION":"06-JAN-06",
     "DISP_ACTION_TO_BE_DT":"",
     "SRNO":"142871",
     "DELETED_FLAG":"",
     "TIMESTAMP":"10-08-2012 AM 11:38:30",
     "STAMPDATETIME":"2012-08-10 11:38:30"
}]

エスケープが必要なキーライン:

"REMARK":"visited b"         s emp & rcd 1 emi",
4

2 に答える 2

2

この問題は、正規表現では解決できません。99%のケースで機能するものを思いつくこともできますが、それ以上はありません。

無効なJSONは無効であり、サーバー側の人間が修正する必要があります。正規表現は、この種の問題を解決することを目的としたものではありません。サーバー側で修正したほうがいいです。

于 2012-09-18T07:43:07.760 に答える
0

正規表現を使用してJS内の無効なJSONを修正する唯一の方法は、それを文字列として受け取り、置換を行ってから、JSONとして再評価することです。この最後のステップは安全でない可能性があります。同様の問題に関する質問があります:オブジェクト文字列をJSONに変換する

したがって、JSONを受け取る前に修正することをお勧めします。とにかく、それができない場合は、正規表現を使用した解決策を次に示します。

正規表現は、値: "と"の区切り文字の間でのみ機能し、値内の二重引用符のみをエスケープするようにします(編集済み)。

:\s*"[^"]*"[^"]*"\s*(,|\s*\})

置換された完全なコードは次のとおりです(正規表現を編集):

var str = '[{ "LDAP_ID":"a", "LAC_NO":"1153274", "ACTION":"VBE", "DATE_OF_ACTION":"06-01-2006 AM 12:00:00", "RESPONSE":"DPP", "DEF_OBSERV":"M", "REMARK":"visited b" s emp & rcd 1 emi", "OPR_ID":"FCTV1", "ACTION_TO_BE":"", "ACTION_TO_BE_DT":"", "AMOUNT_TOBECHG":"", "DELEGATED_TO":"", "BRANCH_CODE":"100", "DISP_DATE_OF_ACTION":"06-JAN-06", "DISP_ACTION_TO_BE_DT":"", "SRNO":"142871", "DELETED_FLAG":"", "TIMESTAMP":"10-08-2012 AM 11:38:30", "STAMPDATETIME":"2012-08-10 11:38:30" }]'

var j = str.replace(/(:\s*"[^"]*)"([^"]*"\s*(,|\s*\}))/g, '$1\\"$2');

var json = JSON.stringify(eval("(" + j + ")"));
于 2012-09-18T07:36:26.070 に答える