json - 有 Json 标签但没有导出

标签 json go

<分区>

开始学习golang。 任务:获取 Json 并解码它。 但是我弄错了:

Json tag but not exported

如何把未导出的字段变成导出的,然后用方法实现?

代码如下:

package main

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

type Time struct {
    time
}
type time struct {
    id                    string  `json:"$id"`
    currentDateTime       string  `json:"currentDateTime,string"`
    utcOffset             float64 `json:"utcOffset,string"`
    isDayLightSavingsTime bool    `json:"isDayLightSavingsTime,string"`
    dayOfTheWeek          string  `json:"dayOfTheWeek,string"`
    timeZoneName          string  `json:"timeZoneName,string"`
    currentFileTime       float64 `json:"currentFileTime,string"`
    ordinalDate           string  `json:"ordinalDate,string"`
    serviceResponse       string  `json:"serviceResponse,string"`
}

func (t *Time) GetTime() (Time, error) {
    result := Time{}

    return result, t.Timenow(result)
}
func (t *Time) Timenow(result interface{}) error {

    res, err := http.Get("http://worldclockapi.com/api/json/utc/now")
    if err != nil {
        fmt.Println("Cannot get Json", err)
    }

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        fmt.Println("Cannot create Body", err)
    }

    defer res.Body.Close()

    var resultJson interface{}
    return json.Unmarshal(body, &resultJson)

}

func main() {

    var a Time
    t, err := a.GetTime()
    if err != nil {
        fmt.Println("Error ", err)
    }
    fmt.Println("Time:", t)
}

请详细解释结构有什么问题以及如何获得正确的响应?

最佳答案

您正在向未导出的字段添加 JSON 标记。

结构字段必须以大写字母 ( exported ) 开头,JSON 包才能看到它们的值。

struct A struct {
    // Unexported struct fields are invisible to the JSON package.
    // Export a field by starting it with an uppercase letter.
    unexported string

    // {"Exported": ""}
    Exported string

    // {"custom_name": ""}
    CustomName string `json:"custom_name"`
}

此要求的根本原因是 JSON 包使用 reflect 来检查结构字段。由于 reflect 不允许访问未导出的结构字段,因此 JSON 包看不到它们的值。

关于json - 有 Json 标签但没有导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50319404/

相关文章:

json - 无法将 json 解码为 protobuf 结构字段

json - 是否有 golang 的 jq 包装器可以生成人类可读的 JSON 输出?

javascript - 通过 JavaScript 中的 JSON 通过 Mandrill 发送电子邮件

json - 解码时,检查 JSON 对象是否具有相同键的倍数

ios - 为什么会出现错误 'Domain=NSCocoaErrorDomain Code=3840 "No value ."UserInfo={NSDebugDescription=No value.}'?

go - 防止 "<no value>"被golang文本/模板库插入

java - 解码作为 json 响应返回的 html - android

php - json_decode 帮助

mysql - 使用下划线从 golang 结构体访问 mysql 字段

go - 为什么字符串中的制表符显示不同?