登录
首页 >  Golang >  Go问答

使用 envconfig 解析 JSON 输入数据

来源:stackoverflow

时间:2024-02-17 10:09:21 483浏览 收藏

本篇文章给大家分享《使用 envconfig 解析 JSON 输入数据》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我正在使用 kelsey hightower 的 envconfig 包,其工作原理如下:

set myapp_foo=foo
set myapp_bar={"cat": "dog"}

现在我正在尝试构建一个 json,其输出应如下所示:

{
  "foo": "foo",
  "bar": {"cat": "dog"}
}

相反,我得到 bar 作为字符串:

{ "foo":"foo",
  "bar": "{\"cat\": \"dog\"}"
}

这是我的脚本:

package main

import (
    "fmt"
    "encoding/json"
    "github.com/kelseyhightower/envconfig"
)

type InputOptions struct {
  Foo string
  Bar string
}

type BodyContent struct {
  Foo string `json:"foo"`
  Bar string `json:"bar"`
}

func main() {
  var input_options InputOptions 
  envconfig.Process("myapp", &input_options)
  
  bodyContent := new(BodyContent)
  bodyContent.Foo = input_options.Foo
  bodyContent.Bar = input_options.Bar
    
  jsonOutput,_ := json.Marshal(bodyContent)
  fmt.Println(string(jsonOutput))
}

我知道这与 string 类型有关 - 不知道它们应该是什么!


解决方案


如果您需要访问值,请使用地图:

package main

import (
    "encoding/json"
    "fmt"

    "github.com/kelseyhightower/envconfig"
)

type inputoptions struct {
    foo string
    bar map[string]string
}

type bodycontent struct {
    foo string            `json:"foo"`
    bar map[string]string `json:"bar"`
}

func main() {
    var input_options inputoptions
    envconfig.process("myapp", &input_options)

    bodycontent := bodycontent(input_options)

    jsonoutput, _ := json.marshal(bodycontent)
    fmt.println(string(jsonoutput)) // {"foo":"foo","bar":{"cat":"dog"}}
}

如果您不关心这些值,请使用 json.RawMessage

package main

import (
    "encoding/json"
    "fmt"

    "github.com/kelseyhightower/envconfig"
)

type InputOptions struct {
    Foo string
    Bar json.RawMessage
}

type BodyContent struct {
    Foo string          `json:"foo"`
    Bar json.RawMessage `json:"bar"`
}

func main() {
    var input_options InputOptions
    envconfig.Process("myapp", &input_options)

    bodyContent := BodyContent(input_options)

    jsonOutput, _ := json.Marshal(bodyContent)
    fmt.Println(string(jsonOutput)) // {"foo":"foo","bar":{"cat":"dog"}}
}

以上就是《使用 envconfig 解析 JSON 输入数据》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>