2014-10-07 46 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