从JSON创建数组的数组

3

在使用php的json_encode时,我接收到了一个ajax调用后作为response返回的以下内容:

"['2013-02-24', 0]", "['2013-02-25', 0]", "['2013-02-26', 1]", "['2013-02-27', 6]", "['2013-02-28', 6]", "['2013-03-01', 3]", ...

我怎样才能用JavaScript将这个内容转换成数组嵌套数组?这真的可能吗?我的意思是,我已经尝试使用jQuery中的makeArrayparseJSON但都没有成功。哪种方法最受欢迎?

编辑:

function submitForm(t) {
    $.ajax({type:'GET', url: 'charts.php', data:$(page_id).serialize(), success:
        function(response) {
            var myFanRemovesData = new Array(response);
            var myChart = new JSChart(chart_id, 'line');
            myChart.setDataArray(myFanRemovesData);

我需要使用二维数组将数据设置到myFanRemovesData中。


这似乎不是有效的JSON字符串。 - Subir Kumar Sao
响应的类型是什么?字符串还是JSON? - Prasath K
使用 console.log(Object.prototype.toString.call(response)); 我收到以下输出:[object String] - Daniela costina Vaduva
3个回答

3

1)去除双引号 ("):

var json = json.replace(/"/g, '');

2) 将整个内容用方括号包裹起来:

json = "[" + json + "]";

3) 将单引号替换为双引号(因为单引号无法解析):

json = json.replace(/'/g, '"');

4) 解析JSON字符串:

var arrays = JSON.parse(json);

这里有一个可行的例子。它将弹出第一个数组中的第一个日期。(注意:数据是从DIV中获取的,以模拟AJAX调用并避免我处理转义引号字符)


1
顺便问一下,谁给我踩了?我猜是个不会写/打字的人吧? - musefan
1
不是我的问题,但我认为这也不是正确的方法。相反,OP应该修复他的PHP脚本输出来生成有效的JSON。 - Bergi
@Bergi:当然,你是对的。但我只能回答这个问题,我会建议更好的方法,但我不知道 OP 服务器如何创建输出数据。我也不做 PHP。 - musefan

2

尝试:

var response = ["['2013-02-24', 0]", "['2013-02-25', 0]", "['2013-02-26', 1]"];
for (var i = 0; i < response.length; i++) {
    var cleaned = response[i].replace(/'/g, "\"");
    response[i] = $.parseJSON(cleaned);
}

演示: http://jsfiddle.net/hu3Eu/

在这段代码之后,response数组将包含由原始字符串组成的数组。


这是一个很好的例子,但我有一个问题:由于response是一个字符串,如果我使用例如$.makeArray(response),我会得到类似于以下内容的东西:[""['2013-02-24', 10]", "['2013-02-25', 17]", "['201…0', 4]", "['2013-04-21', 4]", .... "] 这将创建另一个问题:如何摆脱那两个 " - Daniela costina Vaduva

1

仅为示例...因为您尚未向我们提供任何代码...

$.ajax({
  type: "POST",
  url: "some.php",
  data: { name: "John", location: "Boston" },
  dataType: 'json',
}).done(function( responde ) {
    $.each(responde, function(i, v){ 
      alert(v.0 + ' --- ' + v.1);
    });
});

如果你收到并期望json,你可以直接将其用作数组/对象 :) 如果它是一个数组,你需要使用each循环来访问每个值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接