为了账号安全,请及时绑定邮箱和手机立即绑定

如何在函数中将结构字段作为参数传递以显示 json 数据?

如何在函数中将结构字段作为参数传递以显示 json 数据?

Go
紫衣仙女 2022-10-10 15:52:39
我正在做一个项目来显示 json 数据并检查它们是否是闰年。我正在尝试为IsLeapYear创建一个参数,以便在进行测试时可以传入一些 json 值,我尝试使用User指向结构的指针,以便可以传入函数参数中的字段,但它不起作用.如何在函数参数中传递来自 user.json 的 json 数据,这样我可以更轻松地进行测试?只是为了让您知道,我的测试文件中出现错误,因为我创建了 DateTest 字符串,但IsLeapYear不是字符串。这是我的代码:main.go:  package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "log"    "os"    "time")// Users struct which contains// an array of userstype Users struct {    Users []User `json:"users"`}// User struct which contains a name// a type and a list of social linkstype User struct {    Firstname  string `json:"fname"`    Secondname string `json:"lname"`    Date       string `json:"date"`}var users Usersfunc Birthday() {    // Open our jsonFile    jsonFile, err := os.Open("users.json")    // if we os.Open returns an error then handle it    if err != nil {        fmt.Println(err)    }    fmt.Println("Successfully Opened users.json")    // defer the closing of our jsonFile so that we can parse it later on    defer jsonFile.Close()    // read our opened xmlFile as a byte array.    byteValue, _ := ioutil.ReadAll(jsonFile)    // we initialize our Users array    // we unmarshal our byteArray which contains our    // jsonFile's content into 'users' which we defined above    json.Unmarshal(byteValue, &users)    IsLeapYear(&users{Firstname: ""}, &users{Secondname: ""}) ---> passing the users fileds }func IsLeapYear(firstname *Users, secondname *Users) {    // we iterate through every user within our users array and    // print out the user Type, their name    for i := 0; i < len(users.Users); i++ {        date, err := time.Parse("2006/01/02", users.Users[i].Date)        if err != nil {            date, err = time.Parse("2006-01-02", users.Users[i].Date)            // date, err = time.Parse("2006 01 02", users.Users[i].Date)            if err != nil {                log.Fatal("unsupported date format:", err)            }        }
查看完整描述

1 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

在这里,我清理了你的代码。现在测试应该更容易编写

package main


import (

    "encoding/json"

    "fmt"

    "io/ioutil"

    "log"

    "os"

    "time"

)


// Data struct which contains

// an array of users

type Data struct {

    Users []User `json:"users"`

}


// User struct which contains the first + last name and the birthdate

type User struct {

    FirstName  string `json:"first_name"`

    LastName string `json:"last_name"`

    Date       string `json:"date"`

}


func IsLeapYear(date time.Time) bool {

    return date.Day()%400 == 0 || (date.Day()%4 == 0 && date.Day()%100 != 0)

}


func parseDate(date string) time.Time {

    parsedDate, err := time.Parse("2006/01/02", date)


    if err != nil {

        parsedDate, err = time.Parse("2006-01-02", date)

        if err != nil {

            log.Fatal("unsupported date format:", err)

        }

    }


    return parsedDate

}


func CheckBirthdateOf(user User) {

    date := parseDate(user.Date)


    fmt.Println("User Date: " + user.Date)

    fmt.Println("User First Name: " + user.FirstName)

    fmt.Println("User Last Name: " + user.LastName)


    if IsLeapYear(date) {

        fmt.Println(user.Date, "is a Leap Year ✨ ✨ ✨")


        if date.Day() == time.Now().Day() {

            fmt.Println("TODAY IS YOUR BIRTHDAY AND A Leap YEAR, Happy birthday !!!🎉 🎉 🍾 🍾 ")

        } else {

            fmt.Println("TODAY IS NOT YOUR BIRTHDAY, but it's a leap year..!!! 👍 👍 👍 ")

        }


    } else {

        fmt.Println(user.Date, " is Not a Leap Year 💥 💥 💥 ")

        fmt.Println("Your Date is neither a leap year nor your birthday..!!! 😔😔😔")

    }


    fmt.Println("")

}


func main() {

    jsonFile, err := os.Open("users.json")


    if err != nil {

        panic(err)

    }


    fmt.Println("Successfully Opened users_data.json")

    defer jsonFile.Close()


    byteValue, _ := ioutil.ReadAll(jsonFile)


    var usersData Data

    json.Unmarshal(byteValue, &usersData)


    for _, user := range usersData.Users {

        CheckBirthdateOf(user)

    }

}


查看完整回答
反对 回复 2022-10-10
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信