用bash中的awk/sed解析json以获得键值对

Ama*_*tam 3 bash shell awk json sed

我在SO上已经阅读了许多现有的问题,但没有一个能够解答我想要的问题.我知道使用sed/awk解析bash中的json是很困难的,但是我只需要每个记录中每个记录的键值对列表中的每个记录有几个键值对.我想这样做是因为它会更快,因为主JSON相当大,拥有数百万条记录.

JSON格式如下:

{
    "documents":
    [
        {
            "title":"a",   //needed
            "description":"b",  //needed
            "id":"c",  //needed
            ....(some more:not useful)....
            "conversation":
            [
                {
                    "message":"",
                    "id":"d",   //not needed
                    .....(some more)....
                    "createDate":"e",   //not needed
                },
                ...(some more messages)....
            ],
            "createDate":"f",  //needed
            ....(many more labels).....
        }
    ],
    ....(some more global attributes)....
}
Run Code Online (Sandbox Code Playgroud)

现在为此,我需要标记为需要的属性,但是它们的公共密钥使得通过简单的sed/awk获得问题.任何人都可以建议我们是否可以使用sed/awk.如果可能的话,我们将不胜感激.

PS:我知道,jsawk但我不想引入任何依赖,所以如果可能请建议使用sed/awk.

编辑:下面给出的格式的多个退出(如文档中我们有一个列表)

"title":"a",
"description":"b"
"id":"c"
"createDate":"f"
Run Code Online (Sandbox Code Playgroud)

编辑:JSON没有任何空格.它已被格式化以便于阅读.

小智 5

我建议您使用'jq'或真正的JSON解析器.您无法使用任意正则表达式"解析"JSON.你可以使用awk破解某些东西,但是如果你的输入有一个你没有预料到的形式,这将很容易破解.

所以,答案是,引入一个廉价的依赖(jq,或类似的工具),并围绕它的脚本.除非您在路由器或嵌入式计算机上运行此脚本,否则您可以轻松安装jq.