类似于使用javascript(没有jquery)将文本解析为json

Parse text to json like using javascript (without jquery)

本文关键字:文本 json jquery javascript 没有 类似于      更新时间:2023-09-26

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

最好的工具是regexp和替换的使用。在这个例子中,我尝试将每一行与以下模式匹配:

/(.+?)(?:'t+|'s{2,})(.+?)'n

并将结果插入如下:"key":"value",在我将{}添加到字符串结果周围之后。为了获得一个对象,我使用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>