【问题标题】:Python like json handling using Golang像 Python 一样使用 Golang 处理 json
【发布时间】:2019-02-12 20:45:01
【问题描述】:

使用 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") )

【问题讨论】:

    标签: json go


    【解决方案1】:

    有像 gjson 这样的第三方软件包可以帮助您做到这一点。

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

    【讨论】:

      【解决方案2】:

      我发现以下资源对于从 json 创建结构非常有用。解组应该只匹配你在结构中定义的字段,所以拿走你需要的,如果你愿意,剩下的就留下。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        • 2023-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-07
        • 2010-11-05
        相关资源
        最近更新 更多