【问题标题】:How to deal with a nested struct with the same elements in Go如何在 Go 中处理具有相同元素的嵌套结构
【发布时间】:2021-11-27 23:04:39
【问题描述】:

我一直在为我的一个小项目编写这段代码,我想解析一些如下所示的 JSON 数据:

{
    "payloads": [
        {
            "xss": [
                {
                    "payload": "{{RANDSTR}}\"><scRiPT>alert(1)</ScrIPT>{{RANDSTR}}",
                    "search": "{{RANDSTR}}\"><scRi"
                },
                {
                    "payload": "{{RANDSTR}}\"",
                    "search": "{{RANDSTR}}\""
                },
                {
                    "payload": "{{RANDSTR}}'",
                    "search": "{{RANDSTR}}'"
                }
            ],
            "tpli": [
                {
                    "payload": "{{RANDSTR}}${{ {{RANDINT}} * {{RANDINT}} }}",
                    "search": "{{RANDSTR}}{{RANDINT}}"
                },
                {
                    "payload": "{{RANDSTR}}{{ {{RANDINT}} * {{RANDINT}} }}",
                    "search": "{{RANDSTR}}{{RANDINT}}"
                },
                {
                    "payload": "{{RANDSTR}}{! {{RANDINT}} * {{RANDINT}} !}",
                    "search": "{{RANDSTR}}{{RANDINT}}"
                },
                {
                    "payload": "{{RANDSTR}}{% {{RANDINT}} * {{RANDINT}} %}",
                    "search": "{{RANDSTR}}{{RANDINT}}"
                }
            ]
        }
    ]
}

这是我的结构声明:


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

type Payloads struct {
    Payloads []Payload `json:"payloads"`
}

我知道这不是我应该做的,但我不确定最好的方法。我不想指定键(xss、tpli 等),因为我想轻松扩展此文件而无需修改 Go 文件。

有人可以为我指出如何实现这一目标的正确方向吗?

提前致谢。

【问题讨论】:

  • 如果你不知道你的 JSON 文档的结构,或者如果它可以改变,那么你就不能真正使用结构来定义它。相反,您可以使用 地图。见sohamkamani.com/golang/json/…

标签: json go


【解决方案1】:

这样建模:

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

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

游乐场:https://play.golang.org/p/S6nnOKkADUO

【讨论】:

  • 啊,太棒了,很有魅力,谢谢。我知道我离得不远了!再次感谢,我会在 3 分钟内接受。
  • 任意属性名的JSON对象可以建模为map[string]...
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 2020-06-24
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 2018-09-02
  • 1970-01-01
相关资源
最近更新 更多