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

时间:2015-10-03 17:33:27

标签: javascript jquery arrays json string

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

[[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
            }
        }
    });
}

3 个答案:

答案 0 :(得分:0)

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

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

所以改成它:

"

另外请确保在JSON中使用',因为UIViewControllerBasedStatusBarAppearance无效。

答案 1 :(得分: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解析数据,则需要这样做。

如果您无法重写存储在文件中的数据,只要它采用一致的格式,您就可以使用正则表达式来执行字符串操作以正确格式化数据。

答案 2 :(得分:0)

您可以尝试使用正则表达式来放置引号,然后使用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/

您可能需要稍微更改正则表达式,这仅在您的数据没有空格或引号时才有效。