代码之家  ›  专栏  ›  技术社区  ›  BuddhiLW

JSON封送和解封与GO[duplicate]

  •  0
  • BuddhiLW  · 技术社区  · 3 年前

    为什么我的解组返回一个空的 -结构,在这种情况下?

    我怎样才能使这个程序按预期工作?例如,成功地整理和解压了我编造的数据。

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Person struct {
        name  string
        addr  string
        phone string
    }
    
    func main() {
        p1 := Person{name: "joe", addr: "a st.", phone: "123"}
    
        barr, err := json.Marshal(p1)
        fmt.Println(err)
        fmt.Println("byte array (barr):", barr, "\t person 1 (p1) in Go:", p1)
    
        var p2 Person
        err2 := json.Unmarshal(barr, &p2)
        fmt.Println("person 2 (p2) in Go:", p2, "error:", err2)
    }
    
    : <nil>
    : byte array (barr): [123 125]   person 1 (p1) in Go: {joe a st. 123}
    : person 2 (p2) in Go: {  } error: <nil>
    
    1 回复  |  直到 3 年前
        1
  •  0
  •   theherk    3 年前

    如果希望封送字段,则必须导出这些字段。请看这里:

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Person struct {
        Name  string `json:"name"`
        Addr  string `json:"addr"`
        Phone string `json:"phone"`
    }
    
    func main() {
        p1 := Person{Name: "joe", Addr: "a st.", Phone: "123"}
    
        barr, err := json.Marshal(p1)
        if err != nil {
            panic(err)
        }
        fmt.Println(string(barr))
    }
    

    输出:

    {"name":"joe","addr":"a st.","phone":"123"}
    

    请注意,如果仍然需要将键设置为小写,则可以使用struct标记。

    run in playground