当前位置: 首页 > 面试题库 >

强制转换接口{}以json编码进行结构化

谭桐
2023-03-14
问题内容

我有这样的代码:http :
//play.golang.org/p/aeEVLrc7q1

type Config struct { 
    Application interface{} `json:"application"`
}

type MysqlConf struct {
    values map[string]string `json:"mysql"`
}

func main() {
    const jsonStr = `
        {
            "application": {
                "mysql": {
                    "user": "root",
                    "password": "",
                    "host": "localhost:3306",
                    "database": "db"
                }   
            }
        }`

    dec := json.NewDecoder(strings.NewReader(jsonStr))
    var c Config 
    c.Application = &MysqlConf{}
    err := dec.Decode(&c)
    if err != nil {
        fmt.Println(err)
    }
}

而且我不知道为什么结果结构为空。你有什么想法?


问题答案:

您没有valuesMysqlConf结构中导出,因此json程序包无法使用它。在变量名中使用大写字母可以:

type MysqlConf struct {
    Values map[string]string `json:"mysql"`
}


 类似资料:
  • 假设代码是用c11编译的,并且启用了严格别名。 我不是在寻找一种不同的方法,我想专注于这个具体的问题,以及它是否可行或为什么不可行。 (如果我无意中犯了一些无关的错误,请告诉我,我会改正的) C11标准说: 6.2.5.28所有指向结构类型的指针应具有彼此相同的表示和对齐要求。 6.7.2.1.6结构是由成员序列组成的类型,其存储按有序顺序分配 这意味着结构A和B中指针的大小和对齐方式相同。 结构

  • 和往常一样,我在浏览JDK8源代码时发现了非常有趣的代码: 问题是:如何可能是的实例?因为它们处于不同的层级。 我做了类似的代码片段来测试转换:

  • 我必须和整个AAB,付款条件,货币,检查法规和姓名的号码。 我想通过迭代结果列表来实现这一点: 我的问题是如何强制转换res对象才能获得具体的列值?我读过关于在hibernate查询中创建映射的文章,但我不知道通过添加

  • 问题内容: 很难找到该主题的任何线索。我只能找到有关将一个功能接口转换为另一个功能接口的问题,以及一些有关Java中类型转换的文章。不是我要找的东西。 这个问题是关于转换的,而我想相反地转换为任何功能接口,例如to 。 我发现的方法是围绕该方法创建一个lambda适配器: 但是我想避免写 赞成更简单的事情,例如 ➥因此,有没有办法将旧的Java 1.1反射库映射到较新的Java 8功能接口,还是我

  • 问题内容: 如果我有: 上面是固定的-我不能更改foo或bar。另外,baz必须在bar内转换回foo struct指针。如何将&foo {}强制转换为interface {},以便在调用bar时可以将其用作参数? 问题答案: 要打开到一个很简单: 为了返回到,您可以执行 类型断言 : 或 类型开关 (类似,但可以是多种类型则很有用):