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

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

在 Go 中聚合 JSON 對象

在 Go 中聚合 JSON 對象

Go
肥皂起泡泡 2022-01-17 10:27:43
我正在制作一個從不同來源收集 JSON 對象并將它們聚合到單個 JSON 對象中的 Go 服務。我想知道是否有任何方法可以聚合子對象,而不必再次解組和重新編組它們,也不必手動構建 JSON 字符串。我正在考慮使用struct包含已經編組的部分,例如:type Event struct {    Place     string `json:"place"`    Attendees string `json:"attendees"`}JSON字符串本身的位置Place和位置。Attendees我想以某種方式將它們標記為“已經編組”,這樣它們就不會最終成為轉義的 JSON 字符串,而是按原樣使用。有什么辦法可以做到這一點?
查看完整描述

2 回答

?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

您可以使用 json.RawMessage


RawMessage 是一個原始編碼的 JSON 對象。它實現了 Marshaler 和 Unmarshaler,可用于延遲 JSON 解碼或預計算 JSON 編碼。


此外,json.RawMessage它是一個別名,[]byte因此您可以通過這種方式對其進行賦值:


v := json.RawMessage(`{"foo":"bar"}`)

例子:


package main


import (

    "encoding/json"

    "fmt"

)


type Event struct {

    Place     json.RawMessage `json:"place"`

    Attendees json.RawMessage `json:"attendees"`

}


func main() {

    e := Event{

         Place: json.RawMessage(`{"address":"somewhere"}`),

         Attendees: json.RawMessage(`{"key":"value"}`),

    }

    c, err := json.Marshal(&e)

    if err != nil {

        panic(err)

    }

    fmt.Println(string(c))

    // {"place":{"address":"somewhere"},"attendees":{"key":"value"}}

}


查看完整回答
反對 回復 2022-01-17
?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

是的,您可以使用實現Marshaler接口的自定義類型。


https://play.golang.org/p/YB_eKlfOND


package main


import (

    "fmt"

    "encoding/json"

)


type Event struct {

    Place     RawString  `json:"place"`

    Attendees RawString  `json:"attendees,omitempty"`

}


type RawString string


func (s RawString) MarshalJSON() ([]byte, error) {

    return []byte(s), nil

}


func main() {

    event := Event{

        Place: RawString(`{"name":"Paris"}`),

        Attendees: RawString(`[{"name":"John"}, {"name":"Juli"}]`),

    }

    s, err := json.Marshal(event)

    fmt.Println(fmt.Sprintf("event: %v; err: %v", string(s), err))

}


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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