像使用javascript一样将文本解析为json(不带jquery)

时间:2015-10-29 12:42:43

标签: javascript json parsing

我有一个文本(纯文本),其值与右对齐,字段名称(键)向左对齐。 键和值有一个空格,每个空格最大,以及分隔它们的任意数量的空格 - 最少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, '')
      }
}

1 个答案:

答案 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;
&#13;
&#13;