2012-05-01 19 views
2

我正在對服務進行API調用,但它返回無效的JSON。 photo_url字段沒有將URL封裝在引號中。我把它作爲一個字符串,並試圖編寫一個正則表達式來在URL中添加引號。我正在使用Titanium在Javascript中完成這一切。正則表達式修復無效的JSON

這是我現在的代碼:

var response = '[{"friend_request":{"about_me":"","friend_id":"11043271728","gender":"M","display_name":"foo","age":21,"photo_url":http:\/\/s.foo.com\/img\/nopic\/MB_90x90_male.gif,"hometown":""},"friend_request":{"hometown":"","display_name":"bar","gender":"M","age":"","friend_id":"11040542298","about_me":"","photo_url":http:\/\/s.foo.com\/img\/nopic\/MB_90x90_male.gif}}]'; 
var pattern = /http.*(,|\}|\s)/i; 
var flip = target.match(pattern); 
var foo = target.replace(flip, "\"" + flip + "\""); 
console.log(foo); 

這裏的JSON在人類可讀的形式:

[ 
    { 
    "friend_request": { 
     "about_me": "", 
     "friend_id": "11043271728", 
     "gender": "M", 
     "display_name": "foo", 
     "age": 21, 
     "photo_url": http:\/\/s.foo.com\/img\/nopic\/MB_90x90_male.gif, 
     "hometown": "" 
    }, 
    "friend_request": { 
     "hometown": "", 
     "display_name": "bar", 
     "gender": "M", 
     "age": "", 
     "friend_id": "11040542298", 
     "about_me": "", 
     "photo_url": http:\/\/s.foo.com\/img\/nopic\/MB_90x90_male.gif 
    } 
    } 
] 

眼下,它的發現模式的開始,但即使是怎麼回事進一步。我相信這與逗號有關。我知道應該發生多種模式匹配,但現在,我只是想讓一個人工作。在此先感謝您的幫助。

+4

試圖用正則表達式修復破碎的JSON就像試圖通過投擲一瓶裝滿汽油的瓶子來煽風點火。在這兩種情況下,你都會得到相同的結果:巨大的爆炸。 –

+0

你可以在這裏測試你的正則表達式,它工作得很好:http://www.gskinner.com/RegExr/ – Alex

+3

你是否向服務提供者發送了錯誤報告? –

回答

3
var response = '[{"friend_request":{"about_me":"","friend_id":"11043271728","gender":"M","display_name":"foo","age":21,"photo_url":http:\/\/s.foo.com\/img\/nopic\/MB_90x90_male.gif,"hometown":""},"friend_request":{"hometown":"","display_name":"bar","gender":"M","age":"","friend_id":"11040542298","about_me":"","photo_url":http:\/\/s.foo.com\/img\/nopic\/MB_90x90_male.gif}}]'; 

var str = response.replace(/("photo_url":)([^,}]+)([,\}])/g, '$1"$2"$3') 
+0

謝謝!這似乎是一個令人難以置信的優雅解決方案。 – bilalq