Trouble unmarshaling YAML structure
I have what I think is a very straightforward YAML structure I'm attempting to write to and read from a file.
appName:
version: 1.2.3.4
md5_checksum: 987654321
And I'm really struggling to understand nested structs and how they relate to yaml marshaling.
At this point I have the following:
type Application struct {
Name string `yaml:"application"`
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
yamlData := Application{"MyProgram", "1.2.3.4", 34235234123}
y, err := yaml.Marshal(yamlData)
if err != nil {
log.Fatal("Yaml marshal failed")
}
err = ioutil.WriteFile("applications.yaml", y, 0644)
if err != nil {
log.Fatal("File write failed")
}
This gets me close, but the file reads as follows:
application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123
That looks nice, but this file will be populated by many applications. I've tried a few types of nested structs, but I get hung up on how to supply values to them when finally building them.
go struct yaml
add a comment |
I have what I think is a very straightforward YAML structure I'm attempting to write to and read from a file.
appName:
version: 1.2.3.4
md5_checksum: 987654321
And I'm really struggling to understand nested structs and how they relate to yaml marshaling.
At this point I have the following:
type Application struct {
Name string `yaml:"application"`
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
yamlData := Application{"MyProgram", "1.2.3.4", 34235234123}
y, err := yaml.Marshal(yamlData)
if err != nil {
log.Fatal("Yaml marshal failed")
}
err = ioutil.WriteFile("applications.yaml", y, 0644)
if err != nil {
log.Fatal("File write failed")
}
This gets me close, but the file reads as follows:
application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123
That looks nice, but this file will be populated by many applications. I've tried a few types of nested structs, but I get hung up on how to supply values to them when finally building them.
go struct yaml
See example of nested yaml struct
– Mark
Nov 26 '18 at 1:38
add a comment |
I have what I think is a very straightforward YAML structure I'm attempting to write to and read from a file.
appName:
version: 1.2.3.4
md5_checksum: 987654321
And I'm really struggling to understand nested structs and how they relate to yaml marshaling.
At this point I have the following:
type Application struct {
Name string `yaml:"application"`
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
yamlData := Application{"MyProgram", "1.2.3.4", 34235234123}
y, err := yaml.Marshal(yamlData)
if err != nil {
log.Fatal("Yaml marshal failed")
}
err = ioutil.WriteFile("applications.yaml", y, 0644)
if err != nil {
log.Fatal("File write failed")
}
This gets me close, but the file reads as follows:
application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123
That looks nice, but this file will be populated by many applications. I've tried a few types of nested structs, but I get hung up on how to supply values to them when finally building them.
go struct yaml
I have what I think is a very straightforward YAML structure I'm attempting to write to and read from a file.
appName:
version: 1.2.3.4
md5_checksum: 987654321
And I'm really struggling to understand nested structs and how they relate to yaml marshaling.
At this point I have the following:
type Application struct {
Name string `yaml:"application"`
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
yamlData := Application{"MyProgram", "1.2.3.4", 34235234123}
y, err := yaml.Marshal(yamlData)
if err != nil {
log.Fatal("Yaml marshal failed")
}
err = ioutil.WriteFile("applications.yaml", y, 0644)
if err != nil {
log.Fatal("File write failed")
}
This gets me close, but the file reads as follows:
application: MyProgram
version: 1.2.3.4
md5_checksum: 34235234123
That looks nice, but this file will be populated by many applications. I've tried a few types of nested structs, but I get hung up on how to supply values to them when finally building them.
go struct yaml
go struct yaml
edited Nov 26 '18 at 6:32
Flimzy
39.3k106698
39.3k106698
asked Nov 26 '18 at 0:19
Tim BrammerTim Brammer
35
35
See example of nested yaml struct
– Mark
Nov 26 '18 at 1:38
add a comment |
See example of nested yaml struct
– Mark
Nov 26 '18 at 1:38
See example of nested yaml struct
– Mark
Nov 26 '18 at 1:38
See example of nested yaml struct
– Mark
Nov 26 '18 at 1:38
add a comment |
2 Answers
2
active
oldest
votes
You can define Application struct as
type AppVersion struct {
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
type Application struct {
Name AppVersion `yaml:"appName"`
}
Then call AppVersion
as
yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
add a comment |
I've solved my own problem with help from KibGzr.
No structs necessary just for the marshaling steps.
yamlData := map[string]map[string]string{
appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}
I've created a nested map rather than a struct. This allows me just initialize the map when I've collected all my values rather than trying to work around struct field names. My output is now:
appName:
md5_checksum: checksumString
version: appVersion
Thanks for all the help!
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53473344%2ftrouble-unmarshaling-yaml-structure%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can define Application struct as
type AppVersion struct {
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
type Application struct {
Name AppVersion `yaml:"appName"`
}
Then call AppVersion
as
yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
add a comment |
You can define Application struct as
type AppVersion struct {
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
type Application struct {
Name AppVersion `yaml:"appName"`
}
Then call AppVersion
as
yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
add a comment |
You can define Application struct as
type AppVersion struct {
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
type Application struct {
Name AppVersion `yaml:"appName"`
}
Then call AppVersion
as
yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}
You can define Application struct as
type AppVersion struct {
Version string `yaml:"version"`
Checksum int `yaml:"md5_checksum"`
}
type Application struct {
Name AppVersion `yaml:"appName"`
}
Then call AppVersion
as
yamlData := Application{Name: AppVersion{Version: "1.2.3.4", Checksum: 34235234123}}
answered Nov 26 '18 at 1:48
KibGzrKibGzr
1,486610
1,486610
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
add a comment |
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
KibGzr, thank you for the succinct answer. My issue now is: how to I include the application name. What I end up with this implemtation is a static "appName"(literal) with nested version and checksum values. My main experience with YAML comes from Ansible, and I'm looking for something similar to the second code block shown here: docs.ansible.com/ansible/latest/reference_appendices/…
– Tim Brammer
Nov 26 '18 at 21:29
add a comment |
I've solved my own problem with help from KibGzr.
No structs necessary just for the marshaling steps.
yamlData := map[string]map[string]string{
appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}
I've created a nested map rather than a struct. This allows me just initialize the map when I've collected all my values rather than trying to work around struct field names. My output is now:
appName:
md5_checksum: checksumString
version: appVersion
Thanks for all the help!
add a comment |
I've solved my own problem with help from KibGzr.
No structs necessary just for the marshaling steps.
yamlData := map[string]map[string]string{
appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}
I've created a nested map rather than a struct. This allows me just initialize the map when I've collected all my values rather than trying to work around struct field names. My output is now:
appName:
md5_checksum: checksumString
version: appVersion
Thanks for all the help!
add a comment |
I've solved my own problem with help from KibGzr.
No structs necessary just for the marshaling steps.
yamlData := map[string]map[string]string{
appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}
I've created a nested map rather than a struct. This allows me just initialize the map when I've collected all my values rather than trying to work around struct field names. My output is now:
appName:
md5_checksum: checksumString
version: appVersion
Thanks for all the help!
I've solved my own problem with help from KibGzr.
No structs necessary just for the marshaling steps.
yamlData := map[string]map[string]string{
appName: map[string]string{"version": appVersion, "md5_checksum": checksumString},
}
I've created a nested map rather than a struct. This allows me just initialize the map when I've collected all my values rather than trying to work around struct field names. My output is now:
appName:
md5_checksum: checksumString
version: appVersion
Thanks for all the help!
answered Nov 26 '18 at 22:26
Tim BrammerTim Brammer
35
35
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53473344%2ftrouble-unmarshaling-yaml-structure%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
See example of nested yaml struct
– Mark
Nov 26 '18 at 1:38