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条)

报告相同问题?

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行