我有三套不同的数据-谁和何时。结果文件的结构将永远不会仅更改内部结果(数字等值),而布局将始终保持不变。
我正在尝试解析文件,因此当我上传文件并通过fileReader
运行它时,它会处理设置的记录并使用文档中给定的记录。
当前,这是页面视图:
这就是填充它并为其赋予适当颜色的原因。
function drawRegionsMap() {
var data = google.visualization.arrayToDataTable([
['Country', 'Occurrences'],
['Germany', 55],
['United States', 328],
['Brazil', 119],
['United Kingdom', 39],
['Italy', 39],
['Canada', 40],
['greenland', 80]
]);
var options = {};
var chart = new google.visualization.GeoChart(document.getElementById('regions_div'));
chart.draw(data, options);
}
函数上方,下面将提供结果数据。
journalism.When
2000 --> 219
2003 --> 194
1998 --> 190
2001 --> 173
2004 --> 155
2002 --> 155
1995 --> 144
2008 --> 127
1997 --> 123
1994 --> 117
journalism.Who
Atmos --> 85
J. Geophys --> 77
OECD --> 70
Grossman --> 56
EPA --> 54
PBL --> 49
Krueger --> 45
Stern --> 43
Selden --> 42
Taylor --> 41
journalism.Where
US --> 129
São Paulo --> 115
Brazil --> 104
U.S. --> 76
Germany --> 55
USA --> 45
America --> 42
Italy --> 39
UK --> 39
LA --> 36
因此,对于此解析,我需要它忽略前两个部分,而仅读取底部的journalism. Where
。
解决此问题的最佳方法是什么,我在解析数据方面从未真正工作过。这些都是通过VanillaJS完成的。任何反馈或帮助将不胜感激。我对如何解决这个问题有一些想法,但我想在这里询问是否有人真的技术很好。
答案 0 :(得分:1)
只要您的语法非常简单,不需要任何高级解析技术,您就可以使用split
和for
循环轻松地将其解决。
您基本上可以用\n\n\n\n
分割源字符串以分割每个键。然后,对于每个块,您可以拆分为另一个\n\n
,这将为您提供数据行,您可以在其中将第一项作为键名[journalist.who
,...]并在其他项上进行迭代行用-->
进行拆分,并获取拆分结果的第一项和第二项的键值。
最终结果将类似于下面的函数:
function parseData(src) {
var blocks = src.split('\n\n\n\n');
var keys = {};
for (var i = 0; i < blocks.length; i++) {
var block = blocks[i].split('\n\n');
var label = block[0];
var key = keys[label] = {};
for (var j = 1; j < block.length; j++) {
var data = block[j].split(' --> ');
key[data[0]] = data[1];
}
}
return keys;
}
警告::如果您使用的是行尾样式[
\r\n
]之类的窗口,则必须用\r\n
而不是\n
分割,否则您可以删除像这样解析之前所有\r
:var src = `...`; src = src.replace(/\r/g, ''); var data = parseData(src);
下面是我描述的解决方案的一个工作片段。
var src = `journalism.When
2000 --> 219
2003 --> 194
1998 --> 190
2001 --> 173
2004 --> 155
2002 --> 155
1995 --> 144
2008 --> 127
1997 --> 123
1994 --> 117
journalism.Who
Atmos --> 85
J. Geophys --> 77
OECD --> 70
Grossman --> 56
EPA --> 54
PBL --> 49
Krueger --> 45
Stern --> 43
Selden --> 42
Taylor --> 41
journalism.Where
US --> 129
São Paulo --> 115
Brazil --> 104
U.S. --> 76
Germany --> 55
USA --> 45
America --> 42
Italy --> 39
UK --> 39
LA --> 36`;
function parseData(src) {
var blocks = src.split('\n\n\n\n');
var keys = {};
for (var i = 0; i < blocks.length; i++) {
var block = blocks[i].split('\n\n');
var label = block[0];
var key = keys[label] = {};
for (var j = 1; j < block.length; j++) {
var data = block[j].split(' --> ');
key[data[0]] = data[1];
}
}
return keys;
}
var data = parseData(src);
document.write(`<pre>${JSON.stringify(data, null, 2)}</pre>`);