2017-07-14 20 views
0

不正な形式のJSON値を二重引用符で囲みようとしています。応答は、私が制御できないJavaサーブレット(実際はハッシュマップ)からのものです。これにJavascript二重引用符で囲まれた引用符で囲まれていないJSON値(NOTキー)をラップする正規表現

{ response={ type=000, products=[{id=1,name=productone},{id=2,name=producttwo}],status=success}} 

次の正規表現を使用して
{"response": { "type": 000, "products": [{"id": 1,"name": productone},{"id": 2,"name": producttwo}],"status": success}} 

:私はこのことからそれを得るために管理している

hashmap = hashmap 
     .replace (/ /g,"").replace(/\s/g,"")     //replace all spaces 
     .replace (/'/g,"").replace(/"/g,'')      //replace all quotes 
     .replace(/=/g,":")          //replace = with : 
     .replace(/(['"])?([a-z0-9A-Z_]+)(['"])?:/g, '"$2": '); //put quotes around keys 

はどのようにして使用して二重引用符で値をラップの周りに行くだろう正規表現どんな助けも高く評価されます。

EDIT:

が、私は最終的には、この形態であることがしたい:あなたが望むよう

{"response": { "type": "000", "products": [{"id": "1","name": "productone"},{"id": "2","name": "producttwo"}],"status": "success"}} 
+0

をあなたが取得したいフォームは何ですか? – AnkitMittal

答えて

1

ここでは、すべてのキーと値を引用する方法です:

hashmap = hashmap.replace(/ /g, '')     // strip all spaces 
       .replace(/([\w]+)=/g, '"$1"=')  // quote keys 
       .replace(/=([\w]+)/g, ':"$1"')  // quote values 
       .replace(/=([[{])/g, ':$1');  // = to : before arrays and objects also 

これは、以下を生成します。

{"response":{"type":"000","products":[{"id":"1","name":"productone"},{"id":"2","name":"producttwo"}],"status":"success"}} 

今、あなたとJavaScriptオブジェクトに変換することができます。しかし、JSONの解析に沿って、より多くの数値を引用していないことになるのではなく、このような数字、としてそれらを解析する

obj = JSON.parse(hashmap); 

hashmap = hashmap.replace(/ /g, '') 
       .replace(/([\w]+)=/g, '"$1"=') 
       .replace(/=([a-zA-Z_]+)/g, ':"$1"') 
       .replace(/=([\d]+)/g, function(m, num) {return ':'+parseFloat(num)}) 
       .replace(/=([[{])/g, ':$1') 

これが生成します。

{"response":{"type":0,"products":[{"id":1,"name":"productone"},{"id":2,"name":"producttwo"}],"status":"success"}} 
+0

まさに私が探していたもの... +1 –

+0

それよりも受け入れを検討してください。 – randomir

関連する問題