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

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

Golang 中的 JSON.stringify 等價于 map

Golang 中的 JSON.stringify 等價于 map

Go
qq_遁去的一_1 2022-06-27 17:15:18
我是 Golang 的新手。我必須像在 javascriptmap[string]interface{}中那樣在 Golang 中對 a 進行字符串化JSON.stringify。在 javascript 中,undefined當你這樣做時,它們的值會被省略,JSON.stringify而當我json.Marshal在 Golang 中為nil值做時,我想要同樣的事情。例如在 javascript 中var activity = {"isvalid": true, "value": {"prop": undefined}, "prop": undefined}console.log(JSON.stringify(activity)) // Output: {"isvalid":true,"value":{}}但是在 Golang 如果我這樣做activity := map[string]interface{}{    "isvalid": true,     "value": map[string]interface{}{"prop": nil},    "prop": nil,}jsonStr, _ := json.Marshal(activity)fmt.Println(string(jsonStr)) // output: {"isvalid":true,"prop":null,"value":{"prop":null}}https://play.golang.org/p/dvmz32phdNU輸出存在差異,什么是使 Golang 中的輸出與 Javascript 相同的好方法?編輯:用例涉及從各種類型的來源獲取數據,map[string]interface{}并且鍵可以是任意的,因此將其轉換為結構對我來說不是一個選擇。
查看完整描述

1 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

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

將變量定義為結構并標記每個字段應如何編組為 json。有一個省略標簽可用于忽略 nil 字段。請參閱提供的示例

由于 OP 已經提到他不能使用結構,另一種方法是遞歸地遍歷映射并刪除值為 nil 的條目。

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

package mainimport (    "encoding/json"
    "fmt")func main() {
    data := map[string]interface{}{        "isvalid": true, 
        "value": map[string]interface{}{"prop": nil},        "prop": nil,
    }    
    final := removeNils(data)
    out, err := json.Marshal(final)
    if err != nil {        panic(err)
    }
    fmt.Println(string(out))}func removeNils(initialMap map[string]interface{}) map[string]interface{} {
    withoutNils := map[string]interface{}{}    for key, value := range initialMap {
        _, ok := value.(map[string]interface{})        if ok {
            value = removeNils(value.(map[string]interface{}))
            withoutNils[key] = value
            continue
        }
        if value != nil {
            withoutNils[key] = value
        }
    }
    return withoutNils}


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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