You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何处理元素结构相同的动态键嵌套结构体

解决方案

核心思路是用map类型承接payloads数组元素里的动态键(xss、tpli这类自定义类型名),不需要硬编码结构体字段,后续新增payload类型仅需修改JSON配置,无需调整Go代码。


结构体定义

// PayloadItem 单条payload的固定结构
type PayloadItem struct {
    Payload string `json:"payload"`
    Search  string `json:"search"`
}

// PayloadRoot JSON最外层结构
type PayloadRoot struct {
    Payloads []map[string][]PayloadItem `json:"payloads"`
}

解析&使用示例

package main

import (
    "encoding/json"
    "fmt"
)

type PayloadItem struct {
    Payload string `json:"payload"`
    Search  string `json:"search"`
}

type PayloadRoot struct {
    Payloads []map[string][]PayloadItem `json:"payloads"`
}

func main() {
    // jsonStr替换为你的实际JSON配置内容
    jsonStr := `你的JSON配置字符串`
    var root PayloadRoot
    err := json.Unmarshal([]byte(jsonStr), &root)
    if err != nil {
        panic(err)
    }

    // 遍历所有payload的示例
    for _, group := range root.Payloads {
        // group的key就是payload类型(xss/tpli/后续新增的其他类型)
        for payloadType, items := range group {
            fmt.Printf("=== %s 类型payload ===\n", payloadType)
            for i, item := range items {
                fmt.Printf("%d. payload: %s, search: %s\n", i+1, item.Payload, item.Search)
            }
        }
    }
}

方案说明

  • 所有动态键全部由map[string][]PayloadItem承接,不需要提前在结构体中定义xss、tpli这类字段
  • 后续新增如sqli、命令注入等其他类型的payload时,仅需要在JSON配置里添加对应键值对即可,Go代码不需要任何修改
  • 类型安全,不需要额外做类型断言,所有payload的结构都有明确的结构体约束

内容的提问来源于stack exchange,提问作者DarkMantis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:36:03