付费找人解析一个无限嵌套的json

vus520 · · 5711 次点击
写了一个很长很长的,不知道行不行。 ``` package main import ( "encoding/json" "fmt" "io/ioutil" "log" "os" ) type Root struct { Took int `json:"took"` Timeout bool `json:"timed_out"` Shards Shard `json:"_shards"` Hits Hit `json:"hits"` Aggregations Aggregation `json:"aggregations"` } type Shard struct { Total int `json:"total"` Successful int `json:"successful"` Failed int `json:"failed"` } type Hit struct { Total int `json:"total"` MaxScore int `json:"max_score"` Hits []Hit `json:"hits"` } type Aggregation struct { DR DayRaw `json:"day.raw"` } type DayRaw struct { Dceub int `json:"doc_count_error_upper_bound"` Sodc int `json:"sum_other_doc_count"` Buckets []DayBucket `json:"buckets"` } type DayBucket struct { Key string `json:"key"` Dc int `json:"doc_count"` ChanRaw ChannelRaw `json:"channel.raw"` } type ChannelRaw struct { Dceub int `json:"doc_count_error_upper_bound"` Sodc int `json:"sum_other_doc_count"` Buckets []ChanBucket `json:"buckets"` } type ChanBucket struct { Key string `json:"key"` Dc int `json:"doc_count"` ActtRaw ActtypeRaw `json:"acttype.raw"` } type ActtypeRaw struct { Dceub int `json:"doc_count_error_upper_bound"` Sodc int `json:"sum_other_doc_count"` Buckets []ActtBucket `json:"buckets"` } type ActtBucket struct { Key string `json:"key"` Dc int `json:"doc_count"` Ct Ct `json:"ct"` } type Ct struct { Value int `json:"value"` } func main() { f, err := os.Open("json.log") checkErr(err) data, err := ioutil.ReadAll(f) checkErr(err) var root Root err = json.Unmarshal(data, &root) checkErr(err) result, err := json.MarshalIndent(&root, "", " ") checkErr(err) fmt.Printf("%s\n", result) } func checkErr(err error) { if err != nil { log.Fatal(err) } } ```
#13
更多评论
不收费。 你最后的表格表头,字段里没有噢。。 你想要的结果还是不是很理解,再具体清晰点
#1
buckets是个Array. key: key, doc_count, [ct], [XXX.raw]. [ ]表示可能有 xxx.raw是个Object. key: doc_count_error_upper_bound, sum_other_doc_count, buckets aggregations是个Object. key: xxx.raw 每个都写成一个函数进行处理。前两个有相互调用的情况,但是最终buckets肯定会以没有xxx.raw项结束,不会死循环下去。
#2