【问题标题】:Parsing JSON response using Groovy and filtering for an element based on character count & another condition使用 Groovy 解析 JSON 响应并根据字符数和其他条件过滤元素
【发布时间】:2020-05-17 14:29:41
【问题描述】:

我是 Groovy 的新手,但使用它从存储在文件中的 JSON 响应中提取响应。

以下是 JSON 的 sn-p:

"attachments": [
        {
            "type": "AttachmentText",
            "text": "Line 1"
        },
        {
            "type": "AttachmentText",
            "text": "This is a different text and can be anything but always > 8 characters"
        }
    ],

我正在尝试根据first case is always < 8 字符中的文本而second case is always >8 字符中的文本的条件获取文本 - 没有其他方法可以区分附件元素。但是我的代码只给了我 1 个响应。

{
    def jsonSlurper = new JsonSlurper()
    def object = jsonSlurper.parseText(jsontocsv.toString())

    def array1 =  object.attachments

    if(array1 != null && !array1.isEmpty())
    {
        for(def i =0; i<object.attachments.size();i++)
        {
             if(object.attachments[i].type=="AttachmentText" && object.attachments[i].text.length()>8) {

                varaiable1 = RString.of(object.attachments[i].text.toString())
             }
             else{
                 variable2 = RString.of("Nothing here")
             }
         }
    }
    else {
        variable3 = RString.of("No attachments")
    }
}

我希望我的variable1 会显示响应这是一个不同的文本,可以是任何内容,但总是 > 8 个字符,但我不断收到 这里没有 .

知道如何解决这个问题吗?

【问题讨论】:

  • 您的variable2 从分配的JSON 中获取最后一个值,这似乎不合适。添加一些调试信息以检查
  • 上面的代码不可能将variable1设置为“这里没有”...它只能将variable2设置为...有没有理由你有3个不同的变量名?他们不应该都是variable1吗?另请注意variable1 拼写错误。最后,尝试添加一个“break;”分配变量 1 后的语句,以便在找到所需内容时停止循环。

标签: json groovy rpa workfusion


【解决方案1】:

也许是这样的?

    def methodReturningLongText()
    {
        def jsonSlurper = new JsonSlurper()
        def object = jsonSlurper.parseText(jsontocsv.toString())
        def variable1 = RString.of("No attachments")
        def array1 =  object.attachments

        if(array1)
        {
            variable1 = RString.of("Nothing here")
            for(def i =0; i<array1.size();i++)
            {
                 if(object.attachments[i].type=="AttachmentText" && object.attachments[i].text.length()>8) {

                    variable1 = RString.of(object.attachments[i].text.toString());
                    break;
                 }
             }
        }
        return variable1
    }

注意事项:

  1. 定义的方法签名
  2. 用默认值定义结果变量1
  3. if (array1) 中使用了 groovy-truthiness 测试
  4. 在所有计算返回值的语句中使用相同的结果变量1
  5. 添加了 break 语句,所以循环将在 long 值后停止 找到了
  6. 使用默认值和预先设置“Nothing here”消除了对 else 块的需要。

【讨论】:

  • 这行得通!我现在能够得到正确的答复 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2018-12-22
  • 1970-01-01
相关资源
最近更新 更多