Golang中如何将exec命令的输出转换为JSON

Golang中如何将exec命令的输出转换为JSON 大家好,

我在 Go 语言中使用了 exec.Command(command) 并将其转换为字符串。当我在 Windows 操作系统上运行 tasklist 命令时,它返回的是字符串类型。如何将其转换为 JSON 格式?我不太明白。

tasklist

这是我的代码:https://play.golang.org/p/gn2aMVCE9Xb

结果: tasklist

我需要这样的结果: { “image_name” : syystem idle proses , “PID” : 0 , “session_name” : “services”, “session” : 0 , “mem_usage” : “8K” } 等等

请帮助我解决这个问题。


更多关于Golang中如何将exec命令的输出转换为JSON的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你需要遍历结果的每一行,将其分割成单元格,创建一个以这些单元格为值的结构体,并将该结构体添加到一个数组中。然后将数组序列化为JSON。

更多关于Golang中如何将exec命令的输出转换为JSON的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


要将 tasklist 命令的输出转换为 JSON,你需要解析命令输出的文本,提取所需字段,然后将其编码为 JSON。由于 tasklist 的输出是表格形式的文本,你可以通过按行和列分割来解析它。以下是一个示例代码,演示如何实现这一过程:

package main

import (
    "encoding/json"
    "fmt"
    "os/exec"
    "strings"
)

type Process struct {
    ImageName   string `json:"image_name"`
    PID         string `json:"PID"`
    SessionName string `json:"session_name"`
    Session     string `json:"session"`
    MemUsage    string `json:"mem_usage"`
}

func main() {
    // 执行 tasklist 命令
    cmd := exec.Command("tasklist")
    output, err := cmd.Output()
    if err != nil {
        fmt.Println("Error executing command:", err)
        return
    }

    // 将输出转换为字符串
    outputStr := string(output)
    lines := strings.Split(outputStr, "\n")

    var processes []Process

    // 跳过表头行(通常是前两行)
    for i := 2; i < len(lines); i++ {
        line := strings.TrimSpace(lines[i])
        if line == "" {
            continue
        }

        // 分割行中的字段(假设字段之间由多个空格分隔)
        fields := strings.Fields(line)
        if len(fields) >= 5 {
            process := Process{
                ImageName:   fields[0],
                PID:         fields[1],
                SessionName: fields[2],
                Session:     fields[3],
                MemUsage:    fields[4],
            }
            processes = append(processes, process)
        }
    }

    // 将结构体切片编码为 JSON
    jsonData, err := json.MarshalIndent(processes, "", "    ")
    if err != nil {
        fmt.Println("Error encoding JSON:", err)
        return
    }

    fmt.Println(string(jsonData))
}

这段代码执行 tasklist 命令,解析其输出,并将每个进程的信息存储在一个 Process 结构体中。然后,使用 json.MarshalIndent 将结构体切片转换为格式化的 JSON 输出。注意,tasklist 的输出格式可能因 Windows 版本或系统配置而异,你可能需要根据实际情况调整字段分割的逻辑(例如,使用正则表达式或更复杂的解析方法)。如果字段中包含空格(如 “system idle process”),strings.Fields 可能无法正确分割,这时可以考虑使用固定宽度或更高级的解析技术。

回到顶部