文档章节

golang json.Marshal interface 踩坑

anoty
 anoty
发布于 08/31 13:01
字数 250
阅读 364
收藏 4

Golang 使用 hprose 调用 php 接口,各种类型不确定,用了好多interface,然后发现了 json.Marshal 在处理map类型的时候,key 不能是 interface,否则就会报错


package main
import (
    "encoding/json"
    "fmt"
)
func main() {
    m := make(map[interface{}]interface{})
    m["k1"] = "ddd"
    m["k2"] = "ddd"
    b, err := json.Marshal(m)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

输出


json: unsupported type: map[interface {}]interface {}

怎么办呢?

还能怎么办,只能不用 interface 做 key 。

如果遇到接口返回的 key 是 interface 的情况,在输出的时候,用断言判断他的类型,转成正常的 map 或者 struct


switch i.(type) {
case int:
    v = strconv.Itoa(i.(int))
case string:
    v = k.(string)
……
}

类似这种写法,哦,有点恶心。

更多架构、PHP、GO相关踩坑实践技巧请关注我的公众号:PHP架构师

© 著作权归作者所有

共有 人打赏支持
anoty
粉丝 25
博文 42
码字总数 26186
作品 0
浦东
私信 提问
Go反射应用案例分析--Json数据解析

Golang 包基于Struct类型的特性,提供了JSON解析方法。这里正是反射的常见用法之一。 包中最重要的两个函数如下: : 将Go数据类型软换为JSON格式数据 :将JSON格式数据转换为Go数据类型。 JS...

恋恋美食
09/08
0
0
Go圣经-学习笔记之程序结构(二)

上一篇 Go圣经-学习笔记之程序结构 下一篇 Go圣经-学习笔记之基础数据类型 由类型引出的interface处理 虽然两个类型的底层数据类型相同,但是它们是两种不同的数据类型。它们是不能用来直接进...

cdh0805010
2017/10/22
0
0
Go 的 JSON 处理库--gabs

Gabs 是一个用来处理动态或未知json结构的golang库。通过包装json.Marshal/json.Unmarshal的行为和map[string]interface{} 对象,Gabs提供了更大的便利性。 解析和搜索 JSON ... import "git...

匿名
2016/09/17
209
0
go操作json,注意json的嵌套、数组

package main import ("encoding/json""fmt""os") type ConfigStruct struct {Host string Port int AnalyticsFile string StaticFileVersion int StaticDir string TemplatesDir string Ser......

max佩恩
2014/05/08
0
0
Go圣经-学习笔记之复合类型(三)

上一篇 Go圣经-学习笔记之复合类型(二) 下一篇 Go圣经-学习笔记之函数和错误处理 json数据的序列化和反序列化 json的全称是Javascript object notation, 中文全称:js对象表示法。在序列化和...

cdh0805010
2017/10/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
9
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部