Javascript 正在将字符串数组的字符串解析回数组
我有一个字符串数组,作为varchar保存在数据库列中:Javascript 正在将字符串数组的字符串解析回数组,javascript,jquery,html,mysql,node.js,Javascript,Jquery,Html,Mysql,Node.js,我有一个字符串数组,作为varchar保存在数据库列中: [["ben"],["john","mike"],["ben"]] 我想把数据解析回数组中,这样我就可以在屏幕上显示数据了。在尝试这样做时,我遇到了一个尴尬而恼人的问题: 以下是在服务器上生成并发送回客户端的JSON响应: var response = "[{\"Names\":\""+ rows[i].Names + "\"}]"; res.send(response); 以下是我为解析数据而编写的客户端代码: jQuery.aja
[["ben"],["john","mike"],["ben"]]
我想把数据解析回数组中,这样我就可以在屏幕上显示数据了。在尝试这样做时,我遇到了一个尴尬而恼人的问题:
以下是在服务器上生成并发送回客户端的JSON响应:
var response = "[{\"Names\":\""+ rows[i].Names + "\"}]";
res.send(response);
以下是我为解析数据而编写的客户端代码:
jQuery.ajax({
type: "GET",
url: ...,
dataType: 'json',
contentType: "application/json; charset=utf-8"
}).done(function(data) {
jQuery.each(JSON.parse(data), function(i, parsedData) {
var names = JSON.parse(parsedData.Names);
var labels = "";
for (var n = 0; n < names.length; n++) {
var label = "<label>" + names[n] + "</label>";
labels = labels + label;
}
console.log(labels);
});
});
jQuery.ajax({
键入:“获取”,
网址:。。。,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”
}).完成(功能(数据){
each(JSON.parse(数据),function(i,parsedData){
var name=JSON.parse(parsedData.names);
var标签=”;
对于(var n=0;n
这就是我得到的错误:
以下是JSON验证:
如何解决这个问题?有一个简单的规则: 切勿使用字符串工具创建或修改JSON。没有字符串连接(
+
),没有字符串替换,上帝禁止没有正则表达式。
生成JSON的唯一方法是在数据结构上使用JSON序列化程序。操作JSON的唯一方法是解析它,修改数据结构,然后再次序列化它。无论出于何种目的,JSON本身都将被视为一个常量
您的服务器代码违反了该规则。更改如下:
var responseData = [{
Names: rows[i].Names
}];
var response = JSON.stringify(responseData);
在上面,responseData
是一种数据结构。您可以自由修改它<代码>响应就是从中派生出来的。您没有修改它的自由,使用response
可以做的唯一事情就是将它写入客户端
请注意,rows[i].Names
可能是JSON本身,因此在响应中使用双编码值
如果服务器发送内容类型:application/json
头,客户端可以使用:
jQuery.get("...").done(function(data) {
// data is already parsed here, you don't need to parse it
jQuery.each(data, function(i, item) {
// item.Names is not yet (!) parsed here, so we need to parse it
var names = JSON.parse(item.Names);
var labels = names.map(function (name) {
return $("<label>", {text: name});
}
console.log( labels );
});
});
有一个简单的规则: 切勿使用字符串工具创建或修改JSON。没有字符串连接(
+
),没有字符串替换,上帝禁止没有正则表达式。
生成JSON的唯一方法是在数据结构上使用JSON序列化程序。操作JSON的唯一方法是解析它,修改数据结构,然后再次序列化它。无论出于何种目的,JSON本身都将被视为一个常量
您的服务器代码违反了该规则。更改如下:
var responseData = [{
Names: rows[i].Names
}];
var response = JSON.stringify(responseData);
在上面,responseData
是一种数据结构。您可以自由修改它<代码>响应就是从中派生出来的。您没有修改它的自由,使用response
可以做的唯一事情就是将它写入客户端
请注意,rows[i].Names
可能是JSON本身,因此在响应中使用双编码值
如果服务器发送内容类型:application/json
头,客户端可以使用:
jQuery.get("...").done(function(data) {
// data is already parsed here, you don't need to parse it
jQuery.each(data, function(i, item) {
// item.Names is not yet (!) parsed here, so we need to parse it
var names = JSON.parse(item.Names);
var labels = names.map(function (name) {
return $("<label>", {text: name});
}
console.log( labels );
});
});
我完全不知道您试图在这里实现什么,但是您正在对已经是字符串的内容调用
JSON.stringify()
。@Rorymcrossan我想从数据库中获取数组数组作为字符串,并将其解析回数组数组。我已经编辑了我的问题并删除了stringify函数,但是它仍然不起作用。数组的数组看起来无效JSON@Laazo我已经添加了JSON验证我相信你需要在DB列的值中转义引号才能正确解析我完全不知道你想在这里实现什么,但是,您正在对已经是字符串的内容调用JSON.stringify()
。@Rorymcrossan我想从数据库中获取字符串数组,并将其解析回数组数组。我已经编辑了我的问题并删除了stringify函数,但是它仍然不起作用。数组的数组看起来无效JSON@Laazo我已经添加了JSON验证,我相信您需要在DB列的值中转义引号才能正确解析。谢谢,您建议的更改非常有效!欢迎反馈!谢谢你,你建议的改变非常有效!欢迎反馈!