解析的JSON里面字段是动态的怎么处理?

例如有如下的JSON字符串:


{
"id":"M7DHM98AD2-32E3223F",
"tags": [
{
"id":"9M23X2Z0",
"name":"History"
},
{
"id":"123123123",
"name":"Theory"
}
],
"fields": {
"title":"Title of the item",
"description":"Description of the item"
}
}

idtags 是固定的,但是 fields 里面的字符串经常是动态变化的,可能是 title , description 或者其他的字段,大家在平常解析中都是怎么处理的呢?


针对上面的JSON,可以定义如下的结构体,但是Fields是动态变化的,如何更好的处理呢?


type Item struct {
ID string `json:"id"`
Tags []Tag `json:"tags"`
//Fields []Field `json:"fields"`
}

// Tag data from the call
type Tag struct {
ID string `json:"id"`
Name string `json:"name"`
}

// AllEntries gets all entries from the session
func AllEntries() {
resp, _ := client.Get(APIURL)
body, _ := ioutil.ReadAll(resp.Body)

item := new(Item)
_ = json.Unmarshal(body, &item)

fmt.Println(i, "->", item.ID)
}
已邀请:

stevewang

赞同来自: lotus imjj yong27 sujunxuan

fields定义成map[string]interface{}不就可以了?

lrita

赞同来自: duanquanyong

如果有前置条件的话用json.RawMessage,比较适合当 ID==0时,Fields 一定是个string;当ID==2时,Fields一定是一个boolean等类似情况;
如果没有前置条件的话,还是按k-v遍历吧....

Xargin - 滴滴打杂工

赞同来自:

不考虑性能。。就simplejson吧

要回复问题请先登录注册