Trouble unmarshaling YAML structure












0















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.










share|improve this question

























  • See example of nested yaml struct

    – Mark
    Nov 26 '18 at 1:38
















0















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.










share|improve this question

























  • See example of nested yaml struct

    – Mark
    Nov 26 '18 at 1:38














0












0








0








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.










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












2 Answers
2






active

oldest

votes


















0














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}}





share|improve this answer
























  • 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





















0














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!






share|improve this answer























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    0














    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}}





    share|improve this answer
























    • 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


















    0














    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}}





    share|improve this answer
























    • 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
















    0












    0








    0







    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}}





    share|improve this answer













    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}}






    share|improve this answer












    share|improve this answer



    share|improve this answer










    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





















    • 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















    0














    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!






    share|improve this answer




























      0














      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!






      share|improve this answer


























        0












        0








        0







        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!






        share|improve this answer













        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!







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 26 '18 at 22:26









        Tim BrammerTim Brammer

        35




        35






























            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            404 Error Contact Form 7 ajax form submitting

            How to know if a Active Directory user can login interactively

            Refactoring coordinates for Minecraft Pi buildings written in Python