当前位置: 首页 > 知识库问答 >
问题:

Groovy JsonSlurper和嵌套映射

解翰采
2023-03-14

我有一个方法可以返回相当嵌套的JSON,比如:

[[fizz: buzz, foos: [[count: 4, flim: flam], [count: 6, flim: flume]]]]

当我尝试使用< code>JsonSlurper将这个JSON slurp到< code>def result中时,我得到了异常:

// json == “[[fizz: buzz, foos: [[count: 4, flim: flam], [count: 6, flim: flume]]]]"
String json = getJSON()
JsonSlurper slurper = new JsonSlurper()

def result = slurper.parseText(json)

当<code>parseText</code>执行时产生引发的异常:

Caught: groovy.json.JsonException: Unable to determine the current character, it is not a string, number, array, or object

有什么办法吗?

共有1个答案

广亮
2023-03-14

我认为您正在尝试使用Groovy的映射表示法作为JSON。JSON使用卷曲作为地图,就像这样

import groovy.json.*

def obj = [["fizz": "buzz", "foos": [["count": 4, "flim": "flam"], ["count": 6, "flim": "flume"]]]]
def json = JsonOutput.toJson(obj)
assert json == '''[{"fizz":"buzz","foos":[{"count":4,"flim":"flam"},{"count":6,"flim":"flume"}]}]'''
def result = new JsonSlurper().parseText(json)
 类似资料:
  • 我用的是Protobuf 3。从文档来看,似乎无法定义嵌套贴图: 我正在尝试创建一种消息类型来表示期权链的定价信息(出价和要价)。对于那些不熟悉这些金融工具的人,基本上我有一套“到期日期(YYYYMMDD)”。在每个过期日期中,我都有一组“strikes(float number;如果需要,可以用字符串表示,我同意)”。在每次行使中,我有两个期权,一个“看跌”和一个“看涨”(这被称为期权的“右”)

  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 我用下面的方法尝试了嵌套映射。 我在声明“root_cause”时出错:[{“type”:“mapper_parsing_exception”,“reason”:“root映射定义有不支持的参数:[type:nested]。” 感谢您的帮助。

  • 我必须做一个用户/权限表,其中“权限”是X轴,“用户”是Y轴。表的其余部分由复选框填充,这些复选框指示X用户是否具有Y权限。这两个都是动态长度,每个API都可以访问另一个API。即:权限API为每个权限,具有该权限的用户数组。此外,用户API为每个用户,用户拥有的权限数组。 > 我有嵌套贴图的问题,我觉得这样做很昂贵?(如果有40个权限和350个用户,我们将讨论14k复选框) 如何为每个复选框保存

  • 我有这段代码。第一个非嵌套的映射输出了一些东西,而嵌套的映射没有。我想我理解为什么第二个不起作用。这是一个延迟序列,Perl 6正在收集结果。那很好。但是,第一个(非嵌套的)映射不是以同样的方式懒惰吗?如果我不对映射结果做任何操作,它将如何输出任何内容?也就是说,第一个怎么懒惰?is是否会自动获取一个接收器上下文,在该上下文中,我必须显式地向嵌套的接收器提供接收器(或其他内容)?不知何故,我认为P

  • 我有一个dynamodb表,它的一个属性包含一个嵌套的映射,我想更新一个特定的库存项目,该项目通过一个过滤器表达式进行过滤,从而从该映射中生成一个项目。 如何编写一个更新表达式来更新位置到名称=欧宝的项目的“就位三”,标签包括“x1”(也可能是f3)?这应该只更新第一个列表元素位置属性。