将以数组形式表示的字符串转换为实际数组

4

我有一个以这种格式的文本文件:

[[Line1TextA,[Lat,Long]], [Line1TextB,[Lat,Long]], ...]
[[Line2TextC,[Lat,Long]], [Line2TextD,[Lat,Long]], ...]
.
.
.

我正在解析一个文本文件(已完成),并希望将数组格式的字符串转换为实际的数组,并将它们存储为变量以便使用。
我尝试使用JSON.parse,如此处建议:将包含数组的字符串转换为实际数组,但我无法使其工作(语法错误)。这是我的尝试:https://jsfiddle.net/5yz95ktg/ var myStr = '[[Line1TextA,[Lat,Long]], [Line1TextB,[Lat,Long]]]'
var myArr = JSON.parse(myStr);

var myArr = JSON.parse("[" + myStr + "]"); 编辑:
function readFile(query) {
    $.get('file.txt', function(data) {
        var lines = data.split("\n");    
        for (var i = 0, len = lines.length; i < len; i++) {
            if (lines[i].indexOf(query) > -1) { // Found a match
                var myArr = JSON.parse(lines[i]); // #NOT WORKING
            }
        }
    });
}

当使用JSON.parse时,您遇到了什么错误?请提供实际的样本数组。 - Tushar
控制台显示“未捕获的语法错误:意外的标记”。它提供在jsfiddle中,但我也会将其添加到OP中。 - Mohammad Ali
你到底想做什么?可以将每行按照 CSV 分隔符拆分成数组。建议使用解析库,比如 Papa Parse。 - charlietfl
节省你自己的头痛... http://papaparse.com/ - charlietfl
我尝试了使用PapaParse来处理这个例子,但是无法使其正常工作。www.joyofdata.de/blog/parsing-local-csv-file-with-javascript-papa-parse/ - Mohammad Ali
显示剩余5条评论
3个回答

1

嗯,你需要确保它们是字符串:

var myStr = '[[Line1TextA,[Lat,Long]], [Line1TextB,[Lat,Long]]]'
//-------------^

所以将它改为:

var str = '[["Line1TextA",["Lat","Long"]],["Line1TextB",["Lat","Long"]]]'

同时,请确保在JSON里使用",因为'是无效的。


1
你是第一个发布答案(而不是评论)的人,所以我选择了你的答案作为正确答案。谢谢大家! - Mohammad Ali

0
为了简单起见,Javascript 有两种类型的数组:数字和关联。这与其他语言类似,但实现方式略有不同。实际上,数组实际上是对象,其中数字数组位于数组对象中,而关联数组则是普通对象。
以下是两种语法:
var numericArr = ['foo', 'bar', 'foobar', 42, false];
// numericArr[0] === 'foo'
// numericArr[3] === 42

var assocArr = {'type': 'foo', 'example': 'bar'};
// This can also be written as {type: 'foo'} (keys don't need quotes)
// assocArr['example'] === 'bar'

这些数组也可以嵌套,像这样:

var mixedArr = {data: ['foo', 'bar'], success: false};

所以在你的情况下,命名数组需要用花括号括起来,例如:

var myStr = '[{"Line1TextA":["Lat","Long"]}, {"Line1TextB":["Lat","Long"]}]'

请注意,数组键周围还有引号。如果您想要解析 JSON 数据,则需要这样做。
如果您无法重写存储在文件中的数据,只要它以一致的格式存在,您可以使用类似正则表达式的东西来执行字符串操作,以正确格式化数据。

-1
你可以尝试使用正则表达式来定位引号,然后使用JSON.parse()将格式正确的JSON解析为数组。
var myStr = '[[Line1TextA,[Lat,Long]], [Line1TextB,[Lat,Long]]]';

var json = myStr.replace(/([^\[\],\s]+)/g, '"$&"');
var array = JSON.parse(json);

工作示例:https://jsfiddle.net/397owg7q/

如果您的数据中有空格或引号,您可能需要稍微更改正则表达式才能使其正常工作。


我能够轻松更改正则表达式,因为我重新构建了csv文件。 - Mohammad Ali

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