【问题标题】:Decoding/reading json part of complex text file解码/读取复杂文本文件的json部分
【发布时间】:2017-06-30 07:16:17
【问题描述】:

我开始使用 Electron 开发桌面应用程序。这个应用程序将解析一些文件,并从这些文件中显示数据。这些文件包含复杂的数据。

现在,我正在尝试从一个复杂的文本文件中获取 json 数据。此文本文件包含一些字符串和 json 对象。示例文件如下所示:

    ...strings that I'm not interested in...
    { 
        "partOneA":0,
        "partOneB":7,
        ....
    }
    ...randomly strings may stand between json sections...
    {
        "partTwoA":7,
        "partTwoB":4,
        "partTwoC":4,
        ...
    }
    {
        "differentPartA":3,
        "differentPartB":5,
        "differentPartC":6,
        ...
    }
    ...somemoretext....

问题是,如何使用 javascript 从这个复杂文件中获取 json 部分?应该考虑解决方案的性能。

另外,考虑json结构是这样嵌套的:

{ 
    "partOneA":0,
    "partOneB" :{
        "partOneBnode1":0,
        "partOneBnode2":7,
        }
}

用正则表达式解决不适用于此问题。 现在,我正在尝试寻找基于 javascript 的解决方案。

【问题讨论】:

  • 请注意 { "partOneA" = 0 } 不是有效的 JSON,而 { "partOneA" : 0 } 是。

标签: javascript json node.js electron


【解决方案1】:

只要您可以依赖 {} 作为开始和结束标签,您就可以使用如下正则表达式:

var jsonRegex = new RegExp(/({(?:(.|\n)*?(?:[^\\])){0,1}?})/g);
var result = jsonRegex.exec(text);
var firstMatch= result[1];

因此,您应该在后续索引处获得带有后续匹配项的第一块。你可以阅读文档here on mdn

您可以在http://regexr.com/ 等网站上使用正则表达式

注意

此方法不适用于嵌套 JSON,因为您需要匹配相同数量的左括号和右括号(请参阅此answer)。

【讨论】:

  • 我现在不能尝试这个,但我有一个问题。我认为这不起作用,如果我有这样的嵌套 json 结构: { "partOneA"=0, "partOneB" :{ "partOneBnode1"=0, "partOneBnode2"=7, } } 但我会尝试更多关于正则表达式,谢谢。
  • 是的,这种方法不适用于嵌套的 JSON。也许将此作为​​您的问题的要求添加。这可能表明您不应使用正则表达式来解决此问题,请参阅here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多