如何解析javascript中的JSON数组,该数组在数组中的每个对象周围都有一个引号?

时间:2016-12-18 06:49:13

标签: javascript arrays json node.js

我有一个奇怪的情况。我有一个文本文件,它是一个JSON对象列表,它们由换行符分隔,如下所示:

{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"}
{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"}
{"upSpeed": 13.890492898595365, "downSpeed": 87.35392034236816, "time": "2016-12-12T21:37:52.174878"}
{"upSpeed": 13.69741910903317, "downSpeed": 88.08812682966898, "time": "2016-12-12T21:41:04.688231"}
...

我使用fs.readFile(text file)加载该文本文件,然后使用array = data.split("\n")逐行拆分文本文件,然后将每行插入array,创建一个名为{{1}的JSON数组}。但是,问题是当我使用array拆分原始文本文件时,程序将生成的对象包装在任一侧的单引号(data.split("\n"))中,从而导致无效的JSON。所以,它最终看起来像这样:

'

那么,无论如何都要避免添加单引号,结果是实际的javascript对象?我试图创建一个[ '{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"}', '{"upSpeed": 13.860419184316857, "downSpeed": 85.93058668830014, "time": "2016-12-12T21:31:56.507318"}', '{"upSpeed": 13.890492898595365, "downSpeed": 87.35392034236816, "time": "2016-12-12T21:37:52.174878"}', '{"upSpeed": 13.69741910903317, "downSpeed": 88.08812682966898, "time": "2016-12-12T21:41:04.688231"}' ...] 循环并循环遍历数组中的每个元素并运行for以替换单引号中的任何内容(array[i] = array[i].replace(/'/g, "");),但这根本不起作用并返回上面显示的结果完全相同。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您没有“带单引号的JSON”。您有一个JSON字符串列表。单引号只是节点将其写入控制台的方式。

只需单独解析每一个。

var items = data.split(/\n/).map(JSON.parse);

推荐阅读,因为我怀疑你是在混淆东西:Ben Alman的博客 - There's no such thing as a "JSON Object"

答案 1 :(得分:1)

您是否尝试过类似:var jsonItem = JSON.parse(array[i]);

的内容