解析的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 liushuchun onn更多 »

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

lrita

赞同来自: duanquanyong

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

Xargin

赞同来自:

不考虑性能。。就simplejson吧

要回复问题请先登录注册