Skip to content

🌳 ParseDependencyTreeJSON

解析 composer show --tree --format=json 的 JSON 输出,返回依赖树节点列表 []DependencyNode

何时使用

当你已拿到 JSON 格式的依赖树输出,需要程序化遍历包的传递依赖关系时使用。相比文本解析,JSON 版本能可靠地表达父子层级。

签名

go
func ParseDependencyTreeJSON(output string) ([]DependencyNode, error)

参数

参数类型说明
outputstringcomposer show --tree --format=json 的原始输出

返回值

  • []DependencyNode:依赖树根节点列表。每个 DependencyNodeNameVersionChildren(递归子节点)。
  • error:JSON 反序列化失败时返回 解析依赖树JSON失败: ... 错误。

示例

go
package main

import (
	"fmt"
	"log"

	"github.com/scagogogo/composer-skills/pkg/composer"
)

func main() {
	output := `[{"name":"symfony/console","version":"v5.4.0","children":[{"name":"symfony/string","version":"v6.0.0"}]}]`

	nodes, err := composer.ParseDependencyTreeJSON(output)
	if err != nil {
		log.Fatal(err)
	}
	for _, n := range nodes {
		printNode(n, 0)
	}
}

func printNode(n composer.DependencyNode, depth int) {
	for i := 0; i < depth; i++ {
		fmt.Print("  ")
	}
	fmt.Printf("%s %s\n", n.Name, n.Version)
	for _, c := range n.Children {
		printNode(c, depth+1)
	}
}

进阶

  • 📝 若拿到的是 composer show --tree(无 --format=json)的文本输出,改用 ParseDependencyTreeOutput(output),它按缩进级别推断父子关系(每 4 个字符一级)。
  • 🚀 获取文本依赖树用 ShowDependencyTree(packageName)
  • 🔗 同系列解析器见 ParseComposerShowJSON

基于 MIT 许可证发布