亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

再次解析復雜的 JSON

再次解析復雜的 JSON

Go
尚方寶劍之說 2022-10-24 16:08:36
我有一些通過 API 調用獲得的 JSON,我現在想使用 JSON 解析它,我遵循了一個關于如何使用結構解析 JSON 的在線教程,但我的實際 JSON 比他們使用的要復雜得多。這是我擁有的 JSON 示例:{    "metadata": {},    "items": [      {        "metadata": {          "name": "run7",          "namespace": "default",          "uid": "e218fcc4",          "creationTimestamp": "2022-01-01T00:00:00Z"        },        "spec": {          "arguments": {}        },        "status": {          "phase": "Succeeded",          "startedAt": "2022-01-01T00:00:00Z",          "finishedAt": "2022-01-01T00:00:00Z"        }      }    ]}這是我為它創建的結構:type wfSpec struct{    Arguments string}type wfStatus struct {    Phase  string    StartedAt   string    FinishedAt    string}type wfMetadata struct {    Name string    Namespace string    Uid string    CreationTimestamp string}type Metadata []struct {    Data string}type Items []struct {    wfMetadata    wfStatus    wfSpec}type Workflow struct {    Metadata  Metadata    Items     Items}當我第一次嘗試使用打印值fmt.Printf(workflows.Items.wfMetadata.Name)時出現錯誤workflows.Items.Metadata undefined (type Items has no field or method Metadata),所以我嘗試使用打印整個內容fmt.Printf(workflows),但出現此錯誤cannot use workflows (type Workflow) as type string in argument to fmt.Printf我需要從 JSON 解析的唯一數據是"name": "run7","namespace": "default","uid": "e218fcc4","creationTimestamp": "2022-01-01T00:00:00Z"
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

首先關閉

  1. 我希望您遇到的問題是沒有使用標簽。要解析 JSON,結構的名稱必須與 JSON 字段中的名稱匹配。在這里閱讀Golang Marshal

  2. 其次 wfMetadata 有一個小寫的第一個字母,這意味著它不會被導入。

  3. 第三,workflow.metadataandworkflow.items[i].spec.arguments被設置為 a{}而不是 emptystring ""。我認為他們不應該是string。interface{}如果您不知道或不關心,則可以使用 open 來避免這種情況,或者使用您要連接的 API 中的官方文檔實際實現它們。

  4. 作為說明,使用[]struct對我來說似乎是錯誤的。而是在用法中定義它

請注意,通過使用像jetbrains 的 GoLand這樣的 IDE,他們首先支持通過簡單地將 JSON 粘貼到.go文件中來將 JSON 轉換為結構。他們一開始可能會讓人望而生畏,但確實有很大幫助,并且會在幾秒鐘內為您完成大部分工作。

現在試試這個,并了解為什么以及如何更好地工作。

type Status struct {

    Phase      string `json:"phase"`

    StartedAt  string `json:"startedAt"`

    FinishedAt string `json:"finishedAt"`

}


type ItemMetadata struct {

    Name              string `json:"name"`

    Namespace         string `json:"namespace"`

    UID               string `json:"uid"`

    CreationTimestamp string `json:"creationTimestamp"`

}


type Items struct {

    Metadata ItemMetadata `json:"metadata"`

    Status   Status       `json:"status"`

    Spec     interface{}  `json:"spec"`

}


type Workflow struct {

    Metadata interface{} `json:"metadata"`

    Items    []Items     `json:"items"`

}

操場上的工作示例https://go.dev/play/p/d9rT4FZJsGv


查看完整回答
反對 回復 2022-10-24
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號