golang ,如何计算结构类型 interface{} 中的元素?

我是 Go 的新手,但努力尝试..


我正在尝试编写一些逻辑,需要检查 struct 的属性是否仅包含一个元素,或者第一个元素只有一个子元素。


主要结构是这样的:


type ChartOptins struct {

    Filters Filter `json:"filters"`

    Charts interface{} `json:"charts"`

}

图表天生就是这样的结构数组的组合:


    $filters = array(

        "filters" => array(

            "DayStart" => "12-01-2015",

            "DayEnd" => "12-05-2015",

            "TimePeriods"=> array(

                array("qqq","www"),

            ),

            "lines" => array(

                "first","avokado","drunduki"

            )


        ),

        "charts" => array(

            "noagg" => array(

                array(

                    "name" => "HOLD",

                    "type" => "line"

                ),

                array(

                    "name" => "UKKR",

                    "type" => "line"

                ),

                array(

                    "name" => "SVO",

                    "type" => "line"

                ),

            ),

            "oracle" => array(

                array(

                    "name" => "TDD",

                    "type" => "line"

                ),

            ) 

        ),

    );

进入结构,ChartOptions我从 POST 请求解析 JSON。JSON 如下所示:


{ "filters": { "dayStart": "11-10-2015", "dayEnd": "21-10-2015", "timePeriods": [ [ "qqq", "www" ] ], "lines": [ "first", "avokado", "drunduki" ] }, "charts": { "noagg": [ { "name": "HOLD", "type": "line" } ] } }

所以 ,charts只能有 1 个源和 1 个元素,或者在任意数量的源中包含任意数量的元素。


"charts" : { "noagg": [ { "name": "HOLD", "type": "line" } ] }

or

"charts" : { "noagg": [ { "name": "HOLD", "type": "line" } , { "name": "TDD", "type": "line" } , { "name": "SVO", "type": "line" } ] }

当然,这是转到脚本的 JSON 元素,我将它们解析为 interface{}。当我尝试使用时len(),Go 说我不能在界面上使用它..


处理元素数量的最佳实践是什么,实现这种检查的最佳方法是什么?


翻阅古今
浏览 176回答 2
2回答

守候你守候我

这是一个示例保持界面:https : //play.golang.org/p/Eu6Hj6ddSE只要改变: Charts interface{}女巫Charts []interface{} 。接口上,如果v是你ChartOptins然后让你用LEN()运算符fmt.Println(len(v.Charts.([]interface{})))

尚方宝剑之说

据我了解,您只需要定义用于正确映射 json 的结构。它可以是这样的:package mainimport (    "encoding/json"    "fmt"    "strings")type ChartOptins struct {    Filters map[string]interface{} `json:"filters"`    Charts  map[string][]Chart     `json:"charts"`}type Chart struct {    Name string `json:"name"`    Type string `json:"type"`}func main() {    const jsonStream = `{        "filters": { "dayStart": "oneortwo", "dayEnd": "oneorthree", "timePeriods": [ [ "qqq", "www" ] ], "lines": [ "first", "avokado", "drunduki" ] },         "charts": { "noagg": [ { "name": "HOLD", "type": "line" }, { "name": "UKKR", "type": "line" }, { "name": "SVO", "type": "line" } ], "oracle": [ { "name": "TDD", "type": "line" } ] }     }`    var co ChartOptins    json.NewDecoder(strings.NewReader(jsonStream)).Decode(&co)    fmt.Println(co)    for k, v := range co.Charts {        fmt.Printf("key: %v\n", k)        for _, ch := range v {            fmt.Printf("Name: %v, type: %v\n", ch.Name, ch.Type)        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go