被 go 语言的 json.Marshal 恶心到了

15次阅读

共计 682 个字符,预计需要花费 2 分钟才能阅读完成。

我的需求是,输入 sql,返回序列化后的 json 结果。

在 python 中,官方库就可以返回[{'col1': 1, 'col2': '2', 'col3': true}....] 这种带类型的 json 结果。

在 go 中如果已知 sql 返回的列数和列类型,也可以构造一个 struct 进行数据映射, 然后用 json.Marshal 转为 json。

如果 sql 返回的列数和行类型未知,就很难受了,在 go/mysql 的 官方 wiki 案例 中对于匿名的结果,使用了 interface 或者 sql.RawBytes,但这两种替代方式在json.Marshal 后都变成了 base64 encode 后的 string,既丢失了类型也变异了结果(https://stackoverflow.com/questions/32501784/the-sqlx-library-gives-weird-base64-encoded-looking-results)

请问各位在实际业务中遇到这个问题是怎么处理的?

在其他语言中很自然的 object 序列化为原类型,在 go 的 json.Marshal 中怎么就全变成 string 了

正文完
 0