【问题标题】:Groovy to create JSONGroovy 创建 JSON
【发布时间】:2015-04-08 10:08:13
【问题描述】:

这是我必须在 Groovy 中执行的 SQL 查询:

def resultset_bio = sql.rows("SELECT author, isbn FROM Book WHERE genre = 'biography'")

我正在尝试将此数据转换为 JSON。为此,我正在使用以下代码:

def json = new groovy.json.JsonBuilder()
            json {
                Biographies(resultset_bio.collect{[id: it]})
            }
            println json.toPrettyString()
        }

我期望的 JSON 输出应该是这样的:

    {
    "Biographies":
        {
            "SSS": ["XXX",456988]
        }
}

但相反,我得到了这个:

{
    "Biographies": [
        {
            "id": {
                "author": "XXX",
                "isbn": 456988,
            }
        }
    ]
}

我应该如何更改我的代码?请帮忙。

【问题讨论】:

  • 你真的想要每个字段一个对象吗?
  • 我想他必须这样做,因为可能有不止一本同名的书。恕我直言,这不是一个很好的 ID。我宁愿和 isbn 一起去。
  • 是的,这就是我被要求生成输出 Json 的方式。

标签: json groovy


【解决方案1】:

现在id 作为静态键传递。 试试:

json {
   Biographies(resultset_bio.collect{[(it.id): it]})
}

【讨论】:

  • 不。我得到一个 groovy.lang.MissingPropertyException: No such property: id for class: groovy.sql.GroovyRowResult
  • 好的,用你想放在那里的键替换id,是书名吗?
  • 是的,它是书名,我确实用书名替换了 id。但我仍然得到相同的结果。 MissingPropertyException。
  • 请检查您从resultset_bio 中的DB 获得的确切信息。键是大写还是小写?现在您只需要选择正确的列并用它替换id。在您的 sql 查询中,我没有看到获取标题列。
  • 好的,我刚刚编辑了我的问题。预期的 Json 现在不同了。我的错。我很抱歉。
【解决方案2】:

您的选择中没有书名,因此您无法将书名映射到书信息。

为了得到按作者分组的每一行(即地图)的列表布局:

def authorBios = resultset_bio.groupBy { it.author }

def biographies = authorBios.collectEntries { author, row ->
     [author, row*.values()] 
}
json {
    Biographies(biographies)
}

【讨论】:

    猜你喜欢
    • 2023-02-09
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多