json.Marshal(struct) returns “{}”

后端 未结 3 1549
Happy的楠姐
Happy的楠姐 2020-11-22 07:17
type TestObject struct {
    kind string `json:\"kind\"`
    id   string `json:\"id, omitempty\"`
    name  string `json:\"name\"`
    email string `json:\"email\"`
         


        
相关标签:
3条回答
  • 2020-11-22 07:51
    • When the first letter is capitalised, the identifier is public to any piece of code that you want to use.
    • When the first letter is lowercase, the identifier is private and could only be accessed within the package it was declared.

    Examples

     var aName // private
    
     var BigBro // public (exported)
    
     var 123abc // illegal
    
     func (p *Person) SetEmail(email string) {  // public because SetEmail() function starts with upper case
        p.email = email
     }
    
     func (p Person) email() string { // private because email() function starts with lower case
        return p.email
     }
    
    0 讨论(0)
  • 2020-11-22 07:55

    In golang

    in struct first letter must uppercase ex. phonenumber -> PhoneNumber

    ======= Add detail

    First, I'm try coding like this

    type Questions struct {
        id           string
        questionDesc string
        questionID   string
        ans          string
        choices      struct {
            choice1 string
            choice2 string
            choice3 string
            choice4 string
        }
    }
    

    golang compile is not error and not show warning. But response is empty because something

    After that, I search google found this article

    Struct Types and Struct Type Literals Article then... I try edit code.

    //Questions map field name like database
    type Questions struct {
        ID           string
        QuestionDesc string
        QuestionID   string
        Ans          string
        Choices      struct {
            Choice1 string
            Choice2 string
            Choice3 string
            Choice4 string
        }
    }
    

    Is work.

    Hope for help.

    0 讨论(0)
  • 2020-11-22 07:57

    You need to export the fields in TestObject by capitalizing the first letter in the field name. Change kind to Kind and so on.

    type TestObject struct {
     Kind string `json:"kind"`
     Id   string `json:"id,omitempty"`
     Name  string `json:"name"`
     Email string `json:"email"`
    }
    

    The encoding/json package and similar packages ignore unexported fields.

    The `json:"..."` strings that follow the field declarations are struct tags. The tags in this struct set the names of the struct's fields when marshaling to and from JSON.

    playground

    0 讨论(0)
提交回复
热议问题