2019-02-12 20:45
浏览 157


Using Python I can do following:

r = requests.get(url_base + url)
jsonObj = json.loads(r.content.decode('raw_unicode_escape'))

Is there any way to perform same thing using Golang? Currently I need following:

json.Unmarshal(body, &part_number_json)
PartDetails: ", part_number_json.(map[string]interface{})["PartDetails"].(map[string]interface{})["ManufacturerPartNumber"])

That is to say I need to use casting for each field of JSON what tires and makes the code unreadable. I tried this using reflection but it is not comphortable too.

EDIT: currently use following function:

func jso(json interface{}, fields ...string) interface{} {
    res := json
    for _, v := range fields {
        res = res.(map[string]interface{})[v]
    return res

and call it like that:

fmt.Println("PartDetails: ", jso( part_number_json, "PartDetails", "ManufacturerPartNumber") )
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dongzhuoxie1244 2019-02-12 20:58

    There are third-party packages like gjson that can help you do that.

    That said, note that Go is Go, and Python is Python. Go is statically typed, for better and worse. It takes more code to write simple JSON manipulation, but that code should be easier to maintain later since it's more strictly typed and the compiler helps you check against error. Types also serve as documentation - simply nesting dicts and arrays is completely arbitrary.

    打赏 评论
  • dougeqiang1619 2019-02-13 04:48

    I have found the following resource very helpful in creating a struct from json. Unmarshaling should only match the fields you have defined in the struct, so take what you need, and leave the rest if you like.

    打赏 评论

相关推荐 更多相似问题