go中的任意JSON数据结构

时间:2013-07-24 20:46:59

标签: go

我正在构建一个http api,我的每个处理程序都返回JSON数据,所以我构建了一个处理JSON编组和http响应的包装函数(我已经包含了包装器中的相关部分以及其中一个下面的样本处理程序。)

传递任意嵌套结构的最佳方法是什么(结构还包含任意类型/数量的字段)。现在我已经确定了一个带有字符串键和接口{}值的地图。这是有效的,但这是最常用的方法吗?

result := make(map[string]interface{})
customerList(httpRequest, &result)

j, err := json.Marshal(result)
if err != nil {
    log.Println(err)
    errs := `{"error": "json.Marshal failed"}`
    w.Write([]byte(errs))
    return
}
w.Write(j)


func customerList(req *http.Request, result *map[string]interface{}) {
    data, err := database.RecentFiftyCustomers()
    if err != nil {
        (*result)["error"] = stringifyErr(err, "customerList()")
        return
    }

    (*result)["customers"] = data//data is a slice of arbitrarily nested structs
}

1 个答案:

答案 0 :(得分:1)

如果你事先不知道你得到了什么类型,结构和嵌套,除了将其解码为像map[string]interface{}这样的通用内容之外别无选择。所以这里没有“惯用”或“非惯用”。

(我个人试图以某种方式修复结构,而不是“任意”嵌套和组合。)