doufa5001 2018-07-03 12:12
浏览 137
已采纳

在Go中的JSON请求中使用嵌套数组

How do I go about consuming the following json post in Go?

{
    "notificationType": "email",
    "client": "The CLient",
    "content": "Hellow World",
    "recipients": [
        {
            "address": "email1@example.com"
        },
        {
            "address": "email2@example.com"
        }
    ]
}

I've managed to get the string types but I really don't know enough about Go to deal with the recipients array.

My code looks like this:

package handlers

import (
    "net/http"
    "encoding/json"
    "notificationservice/src/validation"
    "io/ioutil"
    "fmt"
)

func EmailHandler(w http.ResponseWriter, r *http.Request) {
    b, err := ioutil.ReadAll(r.Body)
    defer r.Body.Close()
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    var postData validation.EmailValidator
    err = json.Unmarshal(b, &postData)
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    fmt.Println(postData.Client)
    fmt.Println(postData.Content)
}

My struct:

package validation

import "fmt"

type EmailValidator struct {
    Client  string `json:"client"`
    Content string `json:"content"`
    //Recipients []string `json:"recipients"`
}

func (validator * EmailValidator) ValidateEmail() (bool) {

    var required = []string {validator.Client, validator.Content, validator.Stuff}

    for _, param := range required {
        fmt.Println(param)
    }
    return true;
}

I've tried setting Recipients to []string and [][]string but I really don't know what I'm doing.

In PHP I would use the var_dump command to print out the entire object and debug step by step from there, but Go doesn't appear to have that functionality.

  • 写回答

3条回答 默认 最新

  • douchui7332 2018-07-03 12:19
    关注

    You can try something like this:

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Email struct {
        Adress string `json:"address"`
    }
    
    type EmailValidator struct {
        Client  string `json:"client"`
        Content string `json:"content"`
        Recipients []Email `json:"recipients"`
    }
    
    func main() {
        j := `{
        "notificationType": "email",
        "client": "The CLient",
        "content": "Hellow World",
        "recipients": [
            {
                "address": "email1@example.com"
            },
            {
                "address": "email2@example.com"
            }
        ]
        }`
        result := EmailValidator{}
        json.Unmarshal([]byte(j), &result)
        fmt.Printf("%+v", result) // something like var_dump in PHP
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了