【问题标题】:Parse JSON data using Flex / Bison使用 Flex / Bison 解析 JSON 数据
【发布时间】:2018-07-05 20:21:21
【问题描述】:

我正在接收以下格式的 json 数据...

{
    "timestamp":55759,
    "sttOutput":
    {
        "time":55759,"words":
        [
            {"startTime":1.81,"duration":0.31,"word":"HEY","score":0.97},
            {"startTime":2.14,"duration":0.31,"word":"WHERE'S","score":0.87},
            {"startTime":2.45,"duration":0.47,"word":"FACEBOOK","score":1.0},
            {"startTime":2.92,"duration":0.57,"word":"TRADING","score":1.0}
        ]
    },
    "kwsOutput":
    {
        "time":55759,"words":
        [
            {"startTime":1.96,"duration":0.19,"word":"FACEBOOK=stock ","score":0.63},
            {"startTime":1.82,"duration":0.55,"word":"WHERE=quest IS FACEBOOK=stock TRADING=stock-act ","score":0.74},
            {"startTime":1.83,"duration":0.55,"word":"WHERE'S=quest FACEBOOK=stock TRADING=stock-act ","score":0.85}
        ]
    }
}

我想用 flex/bison 将数据解析为谷歌日历 API 可以使用的有效查询。

关于如何做到这一点的任何提示或帮助展示了最佳实践?

【问题讨论】:

  • 您想遵循哪些“最佳实践”?
  • @RobertHarvey,关于构建代码架构以提高可读性和性能的最佳实践。

标签: bison flex-lexer


【解决方案1】:

Flex/bison 对于 JSON 来说有点过头了,但这里有一个简单的 bison 解析器可以帮助您入门:

%token STRING NUMBER TRUE FALSE NULL
%%
object: '{' obj_elems '}' | '{' '}' ;
obj_elems: STRING ':' value | obj_elems ',' STRING ':' value ;
vector: '[' vec_elems ']' | '[' ']' ;
vec_elems: value | vec_elems ',' value ;
value: STRING | NUMBER | TRUE | FALSE | NULL | object | vector ;

解压到您的查询 API 留给读者作为练习...

【讨论】:

  • 您似乎缺少%start value(ECMA-404,第 4 节,第一句:“JSON 文本是由符合 JSON 值语法的 Unicode 代码点形成的标记序列。” )
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多