我有一个文本(纯文本),其值与右对齐,字段名称(键)向左对齐。 键和值有一个空格,每个空格最大,以及分隔它们的任意数量的空格 - 最少2个空格。
我需要将它们放到树上,以便我可以读取这些字段并提取值。我不知道如何继续并将此文本(下面的示例)解析为类似json的结构。
示例文字输入:
Item Name 1 value 1
Item Name 2 2
Third Item Long Name val 3
Fourth Item value 4
期望的输出:
output = { 'ItemName1' : 'value 1',
'ItemName2' : '2',
'ThirdItemLongName' : 'val 3',
'FourthItem' : 'value 4' }
编辑:
我最后使用了@Gueras Arnaud的答案,经过了一些小修改,但显然我的数据在右边有很多空格。
var source = document.getElementById('source').value;
var newsource = "{" + source.replace(/(.+?)(?:\t+|\s{2,})(.+?)\n/g, '"$1":"$2",').replace(/,$/, '') + '}';
var jsonobjtree = JSON.parse(newsource);
for (var key in jsonobjtree) {
if (jsonobjtree.hasOwnProperty(key)) {
jsonobjtree[key] = jsonobjtree[key].replace(/^\s+|\s+$/g, '')
}
}
答案 0 :(得分:1)
最好的工具是regexp和替换的使用。 在这个例子中,我尝试将每一行与这种模式相匹配:
/(.+?)(?:\t+|\s{2,})(.+?)\n
并将结果插入如下:" key" :"价值",
在字符串结果周围添加{
和}
之后。
为了获得一个对象,我使用了JSON.parse()
var source = document.getElementById('source').value;
var newsource = "{" + source.replace(/(.+?)(?:\t+|\s{2,})(.+?)\n/g, '"$1":"$2",').replace(/,$/, '') + '}';
var obj = JSON.parse(newsource);
document.getElementById('source').value = newsource;

<textarea id="source" rows="10" cols="100">
Item Name 1 value 1
Item Name 2 2
Third Item Long Name val 3
Fourth Item value 4
</textarea>
&#13;