Разбор Json строк как GStrings в Groovy - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь проанализировать файл Json в Groovy, который содержит List из String с. Некоторые из этих строк содержат GString форматирование, и поэтому я надеялся проанализировать их как GString s вместо обычных String s.

Например, следующий элемент description будет содержать 1 GString и 7 String с:

{
  ... (other members)
  "description": [
    "This weapon features an alternate firing mode which shoots a tracker grenade.",
    "As a free action, you can switch to the alternate fire mode.",
    "Grenades can be fired up to 30 feet and detonate after 1 round.",
    "Creatures within 15 feet of the grenade must make a Dexterity saving throw.",
    "The save DC is equal to 8 + your Wisdom modifier + your proficiency bonus.",
    "On a failed save, a creature takes ${variables}.get('grenadeDamage').get(${level}) damage and is considered tagged for 2 rounds.",
    "On a success, a creature takes only half the damage and is not tagged.",
    "Attacks with this weapon against tagged creatures have advantage.",
    "However, if any creatures are tagged, this weapon can only attack those creatures."
  ],
  "grenadeDamage": [
    "1d4", "1d4", "1d4", "1d6", "1d6",
    "1d6", "1d8", "1d8", "1d8", "1d10",
    "1d10", "1d10", "2d6", "2d6", "2d6",
    "4d4", "4d4", "4d4", "5d4", "5d4"
  ]
}

(я не привык форматировать GString с, поэтому это может быть неправильно, в таком случае я извиняюсь)

A Map дополнительных членов (например, "grenadeDamage" в файле Json выше) будут содержать сопоставления их имен с соответствующими List s. Затем они будут переданы в следующий класс:

class Gun
{
    private int level
    // ... (additional fields)
    private List<?> description
    private Map<String, List<String>> variables

    // ... (Constructors, methods, etc.)

    List<String> getDescription()
    {
        description
    }
}

Мы надеемся здесь преобразовать любые GString с List в обычные String с при вызове getDescription() во время выполнения.

В данном примере, если поле level было равно 7, 5-я строка description заполнит ${variables}.get('grenadeDamage').get(${level}) значением 1d8 или 7-й элемент в grenadeDamage .

Проблема заключается в том, что при использовании JsonSlurper для анализа файла Json description создается как List<String> напрямую. В идеале я хотел бы проанализировать description без немедленного принудительного ввода типа как String.

Любые комментарии, советы и конструктивная критика приветствуются и приветствуются!

...