字符串到数组 - JavaScript

时间:2013-06-07 07:57:48

标签: javascript json

我正在使用来自客户端的ajax调用来阅读node.js中的纯文本文件。

结果:    success gives the result as below.

 ""[{\"x\":233,\"y\":279,\"count\":1},{\"x\":256,\"y\":243,\"count\":6}]\n[{\"x\":233,\"y\":279,\"count\":1},{\"x\":256,\"y\":243,\"count\":6}]\n""

解析上述结果后:

   JSON.parse(result);

  "[{"x":233,"y":279,"count":1},{"x":256,"y":243,"count":6}] [{"x":233,"y":279,"count":1},{"x":256,"y":243,"count":6}] "

我想将此字符串更改为对象数组

预期结果是对象数组:

   [{"x":233,"y":279,"count":1},{"x":256,"y":243,"count":6},
    {"x":233,"y":279,"count":1},{"x":256,"y":243,"count":6}
   ]

Ajax呼叫代码

$.ajax({
        url: document.URL + "getData",
        method : "GET",
        success: function (result) {
            var info = JSON.parse(result);
            var object = JSON.parse(info);
            console.log(object);

        }
});

任何想法都会有所帮助。

2 个答案:

答案 0 :(得分:2)

在我看来,你只是得到了双重编码的JSON。只需再次运行JSON.parse()

编辑实际上,这不太正确 - 输出包含两个 JS数组,其中\n分隔符并没有封闭数组。您将不得不稍微操纵数据(现在查看)以使其第二次可解析。

EDIT2 这似乎有效,虽然您当前的var res行包含一对额外的不合法的引号,因此在此测试中我删除了它们:

var res =  "[{\"x\":233,\"y\":279,\"count\":1},{\"x\":256,\"y\":243,\"count\":6}]\n[{\"x\":233,\"y\":279,\"count\":1},{\"x\":256,\"y\":243,\"count\":6}]\n"

var out = JSON.parse(res.replace(/]\s*\[/g, ','));

答案 1 :(得分:2)

这是一些严重混乱的JSON。每端都有一个额外的引号,]\n[位于中间,应该有一个,

你真的应该修复你的服务器以生成有效的JSON,但如果你不能,你可以像这样调整它:

var res = '"[{\"x\":233,\"y\":279,\"count\":1},{\"x\":256,\"y\":243,\"count\":6}]\n[{\"x\":233,\"y\":279,\"count\":1},{\"x\":256,\"y\":243,\"count\":6}]\n"';

var resfix = res.replace( /^"|"$/g, '' ).replace( ']\n[', ',' );

JSON.parse( resfix );

我在var res =字符串的外部更改了额外的引号集,使其成为有效的JavaScript字符串进行测试。