2013-06-03 55 views
0

更新後:反斜線仍然JSON.parse()來

數據從服務器來是:

var data = { 
     "files":[ 
         { 
         "filename": "29f96b40-cca8-11e2-9f83-1561fd356a40.png", 
         "cdnUri":"https://abc.s3.amazonaws.com/" 
         } 
        ] 
       } 

我把JSON數據中隱藏的輸入字段:

更新時間:

$('#logoVal').val(JSON.stringify(file)); 

和HTML是:

<input id="logoVal" type="hidden" value="{"filename":"29f96b40-cca8-11e2-9f83-1561fd356a40.png","cdnUri":"https://abc.s3.amazonaws.com/"}" name="logo"> 

當我提交表單,我這樣做:

var data = $("#form").serializeArray(); 
data.logo = JSON.parse($('#logoVal').val()); 

但標誌變爲:

"logo": "{\"filename\":\"72553050-cca2-11e2-9c13-7d08f99324cc.png\",\"cdnUri\":\"https://abc.s3.amazonaws.com/\"}", 

在蒙戈數據庫。

我該怎麼辦?

+0

你顯然需要再次解碼。除非你的意思是不應該有反斜槓,但沒有那些你會得到一個無效的字符串。 –

+1

該HTML無效,您將需要轉義引號 - 它們是屬性值分隔符。爲什麼你的JSON有撇號? – Bergi

+0

這是您的實際HTML標記嗎? – BrunoLM

回答

1

Example on jsFiddle

要使它成爲一個有效的HTML

<input id="logoVal" type="hidden" value='{"filename":"29f96b40-cca8-11e2-9f83-1561fd356a40.png","cdnUri":"https://abc.s3.amazonaws.com/"}' name="logo"> 

然後你就可以測試使用

var val = JSON.parse($("#logoVal").val()); 
console.log(val); 
alert(val.filename); 

你會看到它會正確轉換。

1

使用單引號爲你的價值:

<input id="logoVal" type="hidden" value='{"filename":"29f96b40-cca8-11e2-9f83-1561fd356a40.png","cdnUri":"https://abc.s3.amazonaws.com/"}' name="logo"> 

工作演示:http://jsfiddle.net/AlienWebguy/uUcnW/

+1

我其實比我發佈的更好。 – mclark1129

+0

@MikeC:但你仍然不能忘記在JSON字符串中可能出現的html-編碼撇號,然後...... – Bergi

+0

當我寫$('#logoVal').val(JSON。stringify(文件)),它把雙引號,而不是單引號。 – Burak