Разобрать данные JSON с помощью Flex / Bison - PullRequest
0 голосов
/ 05 июля 2018

Я получаю данные 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 календаря Google.

Какие-либо советы или помощь о том, как это сделать, которые демонстрируют лучшие практики?

1 Ответ

0 голосов
/ 06 июля 2018

Flex / bison довольно избыточен для JSON, но вот тривиальный синтаксический анализатор бизонов, с которого можно начать:

%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 оставлена ​​как упражнение для читателя ...

...