golang 怎么转化这个 struct?

2017-11-15 17:21:24 +08:00
 mentalidade

请求 elk 的 post 参数是这个 json,两个 term,不同的 value,不知道是我写的这个结构体的有问题还是初始化有问题。求解怎么初始化?

{
    "_source": {
        "excludes": [
            "offset",
            "*type",
            "beat",
            "*timestamp"
        ]
    },
    "query": {
        "bool": {
            "filter": [
                {
                    "term": {
                        "loglvl.keyword": "ERROR"
                    }
                },
                {
                    "term": {
                        "module": "demo"
                    }
                },
                {
                    "range": {
                        "logtime": {
                            "gte": "2017-10-20T09:45:35.015+0800",
                            "lte": "2017-10-24T09:45:35.015+0800"
                        }
                    }
                }
            ]
        }
    }
}
type RequestValue struct {
	Source struct {
		Excludes []string `json:"excludes"`
	} `json:"_source"`
	Query struct {
		Bool struct {
			Filter []struct {
				Term struct {
					LoglvlKeyword string `json:"loglvl.keyword,omitempty"`
					Module string `json:"module,omitempty"`
				} `json:"term,omitempty"`
				Range struct {
					Logtime struct {
						Gte string `json:"gte"`
						Lte string `json:"lte"`
					} `json:"logtime"`
				} `json:"range,omitempty"`
			} `json:"filter"`
		} `json:"bool"`
	} `json:"query"`
}

我这么初始化,想写一个当前时间的 Gte 的 value。

	model.RequestValue{
		Source: {
			Excludes: {"offset", "*type", "beat", "*timestamp"}
		},
		Query: {
			Bool: {
				Filter: {
					{Term: {LoglvlKeyword: "ERROR"}},
					{Term: {Module: "demo"}},
					{Range: {Logtime: {Gte: "2017-10-20T09:45:35.015+0800",
						Lte: "2017-10-24T09:45:35.015+0800"
					},},}
				},
			},
		},
	}
5022 次点击
所在节点    程序员
34 条回复
shawngao
2017-11-15 20:57:40 +08:00
"query.bool.filter.1.term.module" >> "demo"
没测,试试?
mentalidade
2017-11-16 00:31:09 +08:00
@jameshuazhou 感谢,这个方法可以的
mentalidade
2017-11-16 00:31:59 +08:00
@shawngao 感谢,我用了楼上的方法,可以了
mnhkahn
2017-11-16 09:14:26 +08:00
es 的包都封装了这些,直接找个包方便些吧。自己写的话 filter 定义成一个接口,term、range 这些都实现 interface 就可以了。
mengzhuo
2017-11-16 09:30:58 +08:00
好好用 elastic 驱动啊
自己写也要用 json-to-go 啊
mentalidade
2017-11-16 09:37:47 +08:00
@mnhkahn 求问有 go 的包吗?
mentalidade
2017-11-16 09:38:53 +08:00
@mengzhuo 请问什么驱动?我就是用这个 json-to-go 转化的时候,它把 filter 里面第二个 term 过滤掉了,只有第一个
mnhkahn
2017-11-16 09:41:00 +08:00
mentalidade
2017-11-16 10:08:25 +08:00
@mnhkahn 好,谢谢
mengzhuo
2017-11-16 10:11:42 +08:00
bomb77
2018-01-12 12:16:50 +08:00
不知道楼主对生成这种复杂嵌套 json 有什么其他好的办法了吗?
用 17 楼的办法是拼出来了,可以还是感觉有些麻烦,和 go 里的 struct 不太相符
mentalidade
2018-01-12 13:34:38 +08:00
@bomb77 如果是定时脚本,以后不怎么变化的话自己解开,用 17 楼方法就好。如果经常变化的话,那就用 28 的库,直接拼装,解开可以用 fastjson 貌似,好处理一下
bomb77
2018-01-12 13:52:51 +08:00
@mentalidade 谢谢回复,看来暂时还是用 map 手动拼吧,写分离的静态 struct 实在太麻烦了
WilliamYang
2018-09-02 11:51:48 +08:00
说一个关于处理这种大型 json 的比较好的办法, 如果 json 结构比较固定, 可以写成模板, 传入参数, 再生成 json

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/406663

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX