如何为此 json 结构设计一个 ruby 等效对象

How do I design a ruby equivalent objects for this json structure

我有一个 json 结构,我需要根据客户提供的 url 参数构建它。目前,我一直在使用 Jbuilder.encode 构建 json 结构,但它变得非常毛茸茸。

self.query = Jbuilder.encode do |json|
            json.query do
                json.filtered do
                    json.filter do
                        json.bool do
                            if(search_term && username)
                                json.array!(should) do
                                  ........

如何构建 ruby 对象,以便根据它们的初始化方式将它们转换为 json?

下面是我想在 ruby models/poros(普通旧 ruby 对象)中捕获的完整 json 结构。

{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "should": [
                        {
                            "query": {
                                "query_string": {
                                    "query": "tablet",
                                    "fields": [
                                        "standard_analyzed_name",
                                        "standard_analyzed_message"
                                    ]
                                }
                            }
                        },
                        {
                            "term": {
                                "username": "feedmatic"
                            }
                        }
                    ],
                    "must": [
                        {
                            "terms": {
                                "status_type": [
                                    "3",
                                    "4"
                                ]
                            }
                        },
                        {
                            "range": {
                                "created_on": {
                                    "gte": 20140712,
                                    "lte": 1405134711
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

嗯,我不太确定 Poro 的,但我看到的一件事是,当结构开始变得复杂时,就是制作一种方法,returns 你想要的散列表示以显示。您是否尝试过创建一个 returns 具有该结构的哈希的查询方法,然后在 jbuilder 模板中调用它? rails 有一个 .attributes 方法,returns 是一个带有属性的散列,但您必须研究如何将它与 PORO 一起使用,以及它是否适用于此目的。