将数组形式的字符串转换为实际的数组
Posted
技术标签:
【中文标题】将数组形式的字符串转换为实际的数组【英文标题】:Convert string in array form to actual array 【发布时间】:2015-12-31 17:50:59 【问题描述】:我有一个这种格式的文本文件:
[[Line1TextA,[Lat,Long]], [Line1TextB,[Lat,Long]], ...]
[[Line2TextC,[Lat,Long]], [Line2TextD,[Lat,Long]], ...]
.
.
.
我正在解析一个文本文件(已完成),我想将数组格式的字符串转换为实际的数组并将它们存储为要使用的变量。
我尝试使用 JSON.parse,如下所示:Convert string containing arrays to actual arrays 但我无法让它工作(语法错误)。这是我的尝试: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
时遇到的错误是什么。添加实际样本数组。
控制台显示“Uncaught SyntaxError: Unexpected token”。它在 jsfiddle 内部提供,但我也会将其添加到 OP 中。
是用引号括起来的数组值。如果您直接从文件中放入数组,它会运行吗?
您需要将数组值用引号括起来。 jsfiddle.net/5yz95ktg/3
提供包含 csv 解析的完整示例的演示。考虑到当前演示工作正常,未知数太多
【参考方案1】:
嗯,你需要确保它们是字符串:
var myStr = '[[Line1TextA,[Lat,Long]], [Line1TextB,[Lat,Long]]]'
//-------------^
所以改成:
var str = '[["Line1TextA",["Lat","Long"]],["Line1TextB",["Lat","Long"]]]'
还要确保在 JSON 中使用 "
,因为 '
无效。
【讨论】:
您是第一个实际发布答案(而不是 cmets)的人,因此选择您的作为正确答案。谢谢大家!【参考方案2】:为简单起见,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 解析数据,您将需要它。
如果您无法重写存储在文件中的数据,只要格式一致,您就可以使用正则表达式之类的方法来进行字符串操作,以正确格式化数据。
【讨论】:
【参考方案3】:您可以尝试使用正则表达式来放置引号,然后使用 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。以上是关于将数组形式的字符串转换为实际的数组的主要内容,如果未能解决你的问题,请参考以下文章