如何以区分大小写的方式在Go中编组/解组JSON? [关闭]

问题描述 投票:-1回答:1

Golang does not support case sensitive unmarshalling of JSON使用标准包。这似乎是一个非常普遍的需求。

在编组和解组JSON时,有没有办法获得精确的案例匹配?

示例:我不想将“id”与“ID”匹配。

json go
1个回答
2
投票

标准库编码/ json实际上支持区分大小写的编码/解码,如果您的数据结构以这种方式定义成员并适当地包含标记。

例如:

package main

import (
  "encoding/json"
  "fmt"
)

type image struct {
  Url string `json:"url"`
}

type images struct {
  Image1 image `json:"image"`
  Image2 image `json:"Image"`
}

func main() {
  i := images{Image1: image{Url: "test.jpg"}, Image2: image{Url: "test2.jpg"}}

  data, err := json.Marshal(i)
  if err != nil {
    fmt.Printf("error: %s", err)
  }
  fmt.Println(string(data))

  var i2 images
  err = json.Unmarshal(data, &i2)
  if err != nil {
    fmt.Printf("error: %s", err)
  }
  fmt.Printf("%#v\n", i2)

}

https://play.golang.org/p/GWUWYUc-T9t

哪个会输出:

{"image":{"url":"test.jpg"},"Image":{"url":"test2.jpg"}}
main.images{Image1:main.image{Url:"test.jpg"}, Image2:main.image{Url:"test2.jpg"}}

但是,另一个好的json编码包是jsonparser:https://github.com/buger/jsonparser

我不知道它是否支持案例敏感性不同于标准库包。

© www.soinside.com 2019 - 2024. All rights reserved.