Python像使用Golang的json处理

时间:2019-02-12 20:45:02

标签: json go

使用Python,我可以执行以下操作:

r = requests.get(url_base + url)
jsonObj = json.loads(r.content.decode('raw_unicode_escape'))
print(jsonObj["PartDetails"]["ManufacturerPartNumber"]

是否可以使用Golang执行相同的操作? 目前,我需要执行以下操作:

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

这就是说,我需要对JSON的每个字段使用强制转换,这会使代码变得难以理解并且难以理解。 我使用reflection进行了尝试,但也无法令人信服。

编辑: 当前使用以下功能:

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

并这样称呼它:

fmt.Println("PartDetails: ", jso( part_number_json, "PartDetails", "ManufacturerPartNumber") )

2 个答案:

答案 0 :(得分:8)

gjson之类的第三方软件包可以帮助您实现这一目标。

也就是说,请注意Go是Go,Python是Python。 Go是静态类型的,不管是好是坏。编写简单的JSON操作需要花费更多的代码,但是该代码应更严格地键入,并且编译器可帮助您检查错误,因此以后应更易于维护。类型也可以作为文档-简单地将字典和数组嵌套是完全任意的。

答案 1 :(得分:2)

我发现以下资源对从json创建结构非常有帮助。取消编组应仅与您在结构中定义的字段匹配,因此请取所需的内容,并根据需要保留其余部分。

https://mholt.github.io/json-to-go/