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

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

我需要这样的结果: { “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
要将 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 可能无法正确分割,这时可以考虑使用固定宽度或更高级的解析技术。


