2014-10-07 44 views
2

我有包含我通過調用json.stringify各種JS對象創建JSON串的四個文本框..轉換JS對象JSON字符串透過JSON.stringify

eg. '["users.name","users.username"]' (This is the value of one textbox) 

我想要做的就是創建一個從這四個JSON字符串單JSON字符串,並將其發送到使用POST後端..

所以我創建了一個對象,並將其添加這樣

tmp = {} 
tmp["columns"] = $("#sc").val(); 
/*adding more data....*/ 

$.ajax("/api/backend", { 
     data: JSON.stringify(tmp), 
     /* more ajax code...*/ 
    }); 

是被髮送的數據是t他下面的格式..

{"columns":"[\"users.name\",\"users.username\"]"} 

這是不是一個字符串,而是一個JSON對象...

現在,當我這樣做..

tmp1= JSON.stringify(tmp) 

和後使用..

$.ajax("/api/backend", { 
data: JSON.stringify(tmp1), 
/*more code below..*/ 

發送的數據是以下格式並且是字符串..

"{\"columns\":\"[\\\"users.name\\\",\\\"users.username\\\"]\"}" 

這個字符串有很多'\'字符,需要在後端考慮。

這是處理我的問題的正確方法還是我做錯了什麼?

謝謝

+1

我認爲主要的問題是,爲什麼你在文本框中有序列化的數據? – Yoshi 2014-10-07 10:22:11

+0

你究竟想要發送什麼? – Quentin 2014-10-07 10:22:41

回答

0

這取決於你正在努力實現。

如果要向服務器發送結合輸入中所有JSON的JSON,最好在將輸入中的JSON添加到tmp對象之前解析輸入中的JSON。這樣,您將獲得一個包含對象的對象,而不是包含JSON字符串的對象。

從輸入檢索JSON會是這樣的:

tmp["columns"] = JSON.parse($("#sc").val()); 

看出你是你的tmp對象中存儲的對象,而不是JSON字符串。然後,您可以將該對象作爲JSON發送到您的服務器。

因此,您的服務器將收到此:

"{\"columns\":\"[\"users.name\",\"users.username\"]\"}" 

其中,我相信,看起來好多了。我希望有所幫助。

+0

我根據你的建議做了JSON.Parse,並刪除了tmp1 = JSON.stringify(tmp)並返回數據:JSON.stringify(tmp),但它發送了json obj而不是字符串 – Arnab 2014-10-07 11:17:02

+0

現在數據結構是{「columns」 :「[」users.name「,」users.username「]」} – Arnab 2014-10-07 11:21:34

+0

我添加了tmp1 = JSON.stringify(tmp)及其工作..tx – Arnab 2014-10-07 11:22:58