首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Golang simplejson在Json上循环

使用Golang simplejson在Json上循环
EN

Stack Overflow用户
提问于 2017-11-26 15:49:37
回答 1查看 2.5K关注 0票数 1

我在戈朗工作,并使用包github.com/bitly/go-simplejson

我将从客户端接收一个Json,我已经使用该包构造了json对象。现在,我需要遍历Json的所有“第一级”元素。Json是这样的:

代码语言:javascript
复制
{"Name":"demo2","Creator":"some creator","URL":"www.url.com","GACode":"UA-xxxx"} 

我的代码是:

代码语言:javascript
复制
body, _ := ioutil.ReadAll(req.Body)
settings,_ := simplejson.NewJson(body)
fmt.Printf("\nJson: %+v",settings)

for k, v := range settings.MustArray() {
    fmt.Println("\n k:",k)
    fmt.Println("\n v:",v)
}

当我打印Json时,我收到:

代码语言:javascript
复制
Json: &{data:map[Name:demo2 Creator:some creator URL:www.url.com GACode:UA-xxxx]}

循环没有给我任何东西,MustArray()给了我一个空数组。json的键是非常动态的,所以我不能做像.Get("TheKey")这样的事情,因为我不知道Json中可以出现的键的名称。

那我怎么才能翻过那个Json呢?我对Json的第一级更感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-26 16:17:07

在Go中,您可以使用range循环对map进行迭代,就像在arrayslice上一样。range循环在每次迭代中提供给您的值将是映射的键及其相应的值。

因此,您可以简单地从以下位置更改循环行:

代码语言:javascript
复制
for k, v := range settings.MustArray() {

至:

代码语言:javascript
复制
for k, v := range settings.MustMap() {

此外,就我个人而言,我建议放弃simplejson,除非您有比示例中更好的用例。在我看来,使用标准的encoding/json,您可以用较少的努力就可以获得相同的结果。

代码语言:javascript
复制
var settings map[string]interface{}
if err := json.NewDecoder(req.Body).Decode(&settings); err != nil {
    panic(err)
}
fmt.Printf("\nJson: %+v",settings)

for k, v := range settings {
    fmt.Println("\n k:",k)
    fmt.Println("\n v:",v)
}

操场上的例子:https://play.golang.org/p/TKdO5pOJCY

关于forrange的更多信息,在这里:range

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47497959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档