How do I unmarshal this data? I’m trying to extract the Name, Description, Version and other fields. But when I print out the unmarshaled content I get the following:
Index: {ApiVersion:v1 Entry:map[] Generated:2016-10-06T16:23:20.499029981-06:00}
Here is what I’ve tried so far.
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
)
const index_yaml = `apiVersion: v1
entries:
alpine:
- created: 2016-10-06T16:23:20.499814565-06:00
description: Deploy a basic Alpine Linux pod
digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
home: https://helm.sh/helm
name: alpine
sources:
- https://github.com/helm/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.2.0.tgz
version: 0.2.0
- created: 2016-10-06T16:23:20.499543808-06:00
description: Deploy a basic Alpine Linux pod
digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727
home: https://helm.sh/helm
name: alpine
sources:
- https://github.com/helm/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.1.0.tgz
version: 0.1.0
nginx:
- created: 2016-10-06T16:23:20.499543808-06:00
description: Create a basic nginx HTTP server
digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff
home: https://helm.sh/helm
name: nginx
sources:
- https://github.com/helm/charts
urls:
- https://technosophos.github.io/tscharts/nginx-1.1.0.tgz
version: 1.1.0
generated: 2016-10-06T16:23:20.499029981-06:00`
type Entry struct {
Created string `yaml:"created"`
Description string `yaml:"created"`
Home string `yaml:"home"`
}
type Entries map[string][]Entry
type Index struct {
ApiVersion string `yaml:"apiVersion"`
Entry Entries `yaml:"entry"`
Generated string `yaml:"generated"`
}
func main() {
// data, err := ioutil.ReadFile("index.yaml")
// if err != nil {
// log.Fatal("Error reading index", err)
// return
// }
var index Index
err := yaml.Unmarshal([]byte(index_yaml), &index)
if err != nil {
log.Fatal("File reading error", err)
return
}
fmt.Printf("Index: %+v", index)
}
2
Answers
Here is wonderfull service you can use to make struct for your yamls. This is result of its work.
you can add
omitempty
where you need it, or change structure as you want it.update:
Firstly you have to modify the indentation of your yaml input,then modify the
Entry Entries
fromyaml:"entry"
toyaml:"entries"
as per suggestion:Output: