Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在将字符串数组的字符串解析回数组_Javascript_Jquery_Html_Mysql_Node.js - Fatal编程技术网

Javascript 正在将字符串数组的字符串解析回数组

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

我有一个字符串数组,作为varchar保存在数据库列中:

[["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列的值中转义引号才能正确解析。谢谢,您建议的更改非常有效!欢迎反馈!谢谢你,你建议的改变非常有效!欢迎反馈!