首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Golang中使用嵌套JSON结构的最佳方式是什么?

在Golang中使用嵌套JSON结构的最佳方式是什么?
EN

Stack Overflow用户
提问于 2015-08-04 06:39:24
回答 5查看 13.2K关注 0票数 9

我想在Golang中使用JSON,特别是弹性搜索JSON协议。

JSON是深度嵌套的(这是一个简单的查询):

代码语言:javascript
复制
{
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
                "and": [
                    {
                        "range" : {
                            "b" : { 
                                "from" : 4, 
                                "to" : "8"
                            }
                        },
                    },
                    {
                        "term": {
                            "a": "john"
                        }
                    }
                ]
            }
        }
    }
}

这种结构很容易映射到Ruby中的原生数据结构。

但是使用Golang,您似乎必须使用struct定义确切的结构(也许可以从JSON源代码以编程方式生成它们)。

即便如此,像JS中对象的不同“类型”的数组这样的东西也需要解决办法和自定义代码。例如,示例JSON中的"and“键。(http://mattyjwilliams.blogspot.co.uk/2013/01/using-go-to-unmarshal-json-lists-with.html)。

在Golang中有更好的方式使用JSON吗?

EN

回答 5

Stack Overflow用户

发布于 2015-08-04 14:22:27

如果您选择使用struct路由,请考虑以下示例:

代码语言:javascript
复制
{"data": {"children": [
  {"data": {
    "title": "The Go homepage",
    "url": "http://golang.org/"
  }},
  ...
]}}

// -----------

type Item struct {
    Title string
    URL   string
}

type Response struct {
    Data struct {
        Children []struct {
            Data Item
        }
    }
}

来源:http://talks.golang.org/2012/10things.slide#4

票数 4
EN

Stack Overflow用户

发布于 2016-11-04 01:39:25

其中一个选项是使用gabs库:https://github.com/Jeffail/gabs

它对于解析和生成复杂的json结构非常有用。

这是从自述文件生成嵌套json的示例:

代码语言:javascript
复制
jsonObj := gabs.New()
// or gabs.Consume(jsonObject) to work on an existing map[string]interface{}

jsonObj.Set(10, "outter", "inner", "value")
jsonObj.SetP(20, "outter.inner.value2")
jsonObj.Set(30, "outter", "inner2", "value3")

将打印:

代码语言:javascript
复制
{"outter":{"inner":{"value":10,"value2":20},"inner2":{"value3":30}}}
票数 4
EN

Stack Overflow用户

发布于 2015-08-04 08:47:56

对于原生golang,使用map[string]interface{}或定义一个结构。对于另一种容易访问json对象的方法,可以是JsonPathJason

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

https://stackoverflow.com/questions/31797892

复制
相关文章

相似问题

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