spf13 / viper

Go configuration with fangs
MIT License
26.32k stars 2.01k forks source link

Failed to deserialize the specific yaml file #1769

Closed richelieu-yang closed 1 month ago

richelieu-yang commented 4 months ago

Preflight Checklist

Viper Version

1.18.2

Go Version

1.19.13

Config Source

Defaults

Format

No response

Repl.it link

No response

Code reproducing the issue

package main

import (
    "fmt"
    "github.com/spf13/viper"
)

func main() {
    type bean struct {
        ResponseHeadersConfig map[string]string `json:"responseHeaders" yaml:"responseHeaders"`
    }

    b := &bean{}

    v := viper.New()
    v.SetConfigFile("_test.yaml")
    if err := v.ReadInConfig(); err != nil {
        panic(err)
    }
    err := v.Unmarshal(b)
    if err != nil {
        panic(err)
    }

    fmt.Println(b.ResponseHeadersConfig) // 
}

Expected Behavior

output

map[strict-transport-security:max-age=604800; includeSubDomains x-xss-protection:1;mode=block]

Actual Behavior

output

map[]

Steps To Reproduce

No response

Additional Information

_test.yaml

responseHeaders: X-XSS-Protection: 1;mode=block Strict-Transport-Security: max-age=604800; includeSubDomains

github-actions[bot] commented 4 months ago

👋 Thanks for reporting!

A maintainer will take a look at your issue shortly. 👀

In the meantime: We are working on Viper v2 and we would love to hear your thoughts about what you like or don't like about Viper, so we can improve or fix those issues.

⏰ If you have a couple minutes, please take some time and share your thoughts: https://forms.gle/R6faU74qPRPAzchZ9

📣 If you've already given us your feedback, you can still help by spreading the news, either by sharing the above link or telling people about this on Twitter:

https://twitter.com/sagikazarmark/status/1306904078967074816

Thank you! ❤️

mazenharake commented 3 months ago

Have you tried indentation in your _test.yaml file?

responseHeaders:
    X-XSS-Protection: 1;mode=block
    Strict-Transport-Security: max-age=604800; includeSubDomains

you should probably also use mapstructure:"responseHeaders" unless you changes the mapstructure package to use a different tag.

sagikazarmark commented 1 month ago

I think @mazenharake is correct: you need to use mapstructure struct tags.