【问题标题】:string to array - javascript字符串到数组 - javascript
【发布时间】:2013-06-03 11:04:00
【问题描述】:

我正在使用来自客户端的 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);

        }
});

任何想法都会有所帮助。

【问题讨论】:

  • 能不能把文件node.json直接存起来,用ajax调用???
  • @JeffLee 我只在检索部分工作,没有写权限
  • @karthick.k,显示 ajax 调用
  • btw var res 不是有效的 javascript 语句????

标签: javascript json


【解决方案1】:

这是一些严重混乱的 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 字符串以进行测试。

【讨论】:

  • 从 OP 复制的第一行 var res 是不合法的。如果封闭的双引号不存在,那么第一个 .replace() 是不必要的。
  • @karthick.k 当您提供的 var res 甚至不是合法的 JS 时,我不明白它是如何工作的。
  • @Alnitak - 很好,谢谢。在我的测试用例中,我将最外面的" 更改为',但忘记将其复制到答案中。
  • @MichaelGeary 目前尚不清楚 OP 在问题中提出的外部双引号是否存在。
  • @Alnitak - 是的,但我发布的代码不管有没有它们都一样。
【解决方案2】:

在我看来,您只是获得了双重编码的 JSON。再次通过JSON.parse() 运行它。

EDIT 实际上,这不太正确 - 输出包含 两个 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, ','));

【讨论】:

  • SyntaxError: JSON.parse: 第二次解析时 JSON 数据后出现意外的非空白字符
  • @Swift 你错了——我确实意识到了这一点,但是 OP 希望将两个数组中的对象合并到一个 single 数组中。
猜你喜欢
  • 1970-01-01
  • 2013-03-17
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2013-04-27
  • 1970-01-01
相关资源
最近更新 更多