1

我正在node.js从客户端使用 ajax 调用读取纯文本文件。

结果 : 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);

        }
});

任何想法都会有所帮助。

4

2 回答 2

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, ','));
于 2013-06-07T08:02:28.193 回答
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 字符串以进行测试。

于 2013-06-07T08:08:07.783 回答