【问题标题】:How do I parse a JSON string in Golang?如何在 Golang 中解析 JSON 字符串?
【发布时间】:2015-01-18 18:03:13
【问题描述】:

给定如下 URL。

http://127.0.0.1:3001/find?field=hostname&field=App&filters=["hostname":"example.com,"type":"vm"]

如何提取与键对应的 JSON 值,例如:主机名“example.com”并键入“vm”。

我在努力

filters := r.URL.Query()["filters"]

给出以下输出:

[["hostname":"example.com,"type":"vm"]]

【问题讨论】:

标签: json parsing url go


【解决方案1】:

使用 encoding/json 包解析 JSON。示例 URL 中的查询字符串不包含有效的 JSON。

这是一个示例,展示如何在稍微不同的 URL 上使用 JSON 解析器。

s := `http://127.0.0.1:3001/find?field=hostname&field=App&filters={"hostname":"example.com","type":"vm"}`
u, err := url.Parse(s)
if err != nil {
    log.Fatal(err)
}
var v map[string]string
err = json.Unmarshal([]byte(u.Query().Get("filters")), &v)
if err != nil {
    log.Fatal(err)
}
fmt.Println(v)

playground example

【讨论】:

  • 从技术上讲,问题提出的示例“字符串”甚至不是字符串。通过使用r.URL.Query(),它们具有map[string][]string (golang.org/pkg/net/url/#Values) 类型的值。所以这个问题在技术上并不准确:他们应该得到一个带有单个字符串的列表。他们可能对值做了一个简单的fmt.Println(filters),而不是提供更多文字输出的输出语句,例如fmt.Printf("%#v\n", filters)
猜你喜欢
  • 2021-09-18
  • 2023-04-10
  • 2011-05-20
  • 2016-12-05
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多