如何获取类似 json 文件的两项

如何获取类似 json 文件的两项

我正在尝试解析Sublime Text 3会话文件:会话.sublime_session。它由看起来像 JSON 格式的内容组成。

使用:

cat Session.sublime_session | grep -A13 "\"file\":"

我可以轻松获得一个列表(对每个文件重复),如下所示:

    "file": "/F/myHW/check_usb_switch.sh",
    "semi_transient": false,
    "settings":
    {
            "buffer_size": 873,
            "regions":
            {
            },
            "selection":
            [
                    [
                            872,
                            872
                    ]
--

我怎样才能得到这样的列表:

/F/myHW/check_usb_switch.sh:872
...

(还有其他或更合适的工具吗?(例如jqETC?)


请求的信息:

# Start of file:
{
        "folder_history":
        [
        ],
        "last_version": 3176,
        "last_window_id": 9,
        "log_indexing": false,
        "settings":
        {
                "new_window_height": 912.0,
                "new_window_settings":
                {
                        "auto_complete":
                        {
                                "selected_items":
                                [
                                        [
                                                "input",
                                                "input_stream"
                                        ],
...
        },
        "windows":
        [
                {
                        "auto_complete":
                        {
                                "selected_items":
                                [
                                        [
                                                "file",
                                                "fileName"
...
                                        [
                                                "json",
                                                "json_response"
                                        ]
                                ]
                        },
                        "buffers":
                        [
                                {
                                        "file": "/F/xxxx.sh",
                                        "settings":
                                        {
                                                "buffer_size": 7040,
                                                "encoding": "UTF-8",
                                                "line_ending": "Unix"
                                        }
                                },
                                {
                                        "file": "/C/xxxx.txt",

请求2:

                                                {
                                                        "buffer": 1,
                                                        "file": "/C/Users/xxxx/Desktop/tmp/xxxx.txt",
                                                        "semi_transient": false,
                                                        "settings":
                                                        {
                                                                "buffer_size": 6529,
                                                                "regions":
                                                                {
                                                                },
                                                                "selection":
                                                                [
                                                                        [
                                                                                3569,
                                                                                3569
                                                                        ]
                                                                ],
                                                                "settings":
                                                                {
                                                                        "syntax": "Packages/Text/Plain text.tmLanguage",
                                                                        "word_wrap": false
                                                                },
                                                                "translation.x": 0.0,
                                                                "translation.y": 0.0,
                                                                "zoom_level": 1.0
                                                        },
                                                        "stack_index": 46,
                                                        "type": "text"
                                                },

答案1

jq -r '.windows[]|.buffers[]|.file' Session.sublime_session

这将使用 JSON 解析器从 Sublime Text 3 会话文件中记录的每个窗口的每个缓冲区中jq解析出所有节点。file

要获取file信息以及该selection位的第一个整数,您必须查看数据中的其他位置:

jq -r '.windows[]|.groups[].sheets[]| "\(.file):\(.settings.selection[0][0])"' Session.sublime_session

请注意,file与第一个命令相比,该字段是从文档中完全不同的位置获取的。

在我使用的一个小示例文件中,这可能会生成

/Users/kk/hello:18

作为输出。

(在 macOS 上的会话文件上进行了测试,我hello在主目录中调用了一个文件)

不幸的是,我没有找到有关这些 JSON 文件所用模式的任何文档,因此这里的解析完全是临时的。

相关内容