Разбор ответа JSON с использованием Groovy и фильтрация для элемента на основе количества символов и другого условия - PullRequest
0 голосов
/ 01 февраля 2020

Я новичок в Groovy, но использую его для извлечения ответов из JSON ответа, сохраненного в файле.

Ниже приведен фрагмент JSON:

"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 - другого способа отличить gui* нет 1024 * элементы крепления в противном случае. Однако мой код дает мне только один из ответов.

{
    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 символов но я продолжаю получать Ничего здесь вместо этого.

Есть идеи, как это исправить?

1 Ответ

1 голос
/ 01 февраля 2020

Может быть, что-то вроде этого?

    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. используется groovy - проверка на достоверность в if (array1)
  4. использовала одну и ту же переменную результата1 во всех операторах, вычисляя возвращаемое значение
  5. добавлен оператор break, поэтому цикл будет остановлен после того, как будет найдено длинное значение
  6. использование значений по умолчанию и предварительная установка «Ничего здесь» устраняет необходимость в других блоках.
...