Удалите кавычки из целых чисел в JSON Builder

Мне нужно запустить отличные скрипты ниже, чтобы создать шаблон JSON. Проблема, с которой я столкнулся, заключается в том, что целое число в шаблоне заключено в кавычки. Удаление кавычек из переменных обрабатывает их как строку.

cat port.txt
1001

Вот мой скрипт построителя JSON

def test = new groovy.json.JsonBuilder()
   test {
    ports new File('ports.txt').readLines()*.trim().collect { p ->
        [name: "$p-tcp", protocol: "TCP", port: "$p", targetPort: "$p"]
    }
}
println test.toPrettyString()

Когда я запускаю его, он выдает следующее:

{
"ports": [
    {
        "name": "1001-tcp",
        "protocol": "TCP",
        "port": "1001",
        "targetPort": "1001"
    }
]
}

Однако я хочу, чтобы он вырезал кавычки для портов и targetPorts, например

{
"ports": [
    {
        "name": "1001-tcp",
        "protocol": "TCP",
        "port": 1001,
        "targetPort": 1001
    }
]
}

Любая подсказка о том, как это сделать, очень ценится.


person crusadecoder    schedule 30.01.2019    source источник
comment
@NathanHughes Подскажите, пожалуйста, как это сделать? Я все еще новичок в Groovy.   -  person crusadecoder    schedule 30.01.2019
comment
Измените port: "$p" на port: Integer.parseInt(p)   -  person tim_yates    schedule 30.01.2019


Ответы (1)


Если вы ожидаете, что файл ports.txt всегда будет содержать только целые числа, вы можете преобразовать прочитанные строки в целые числа перед их сбором. Даже не обрезая струны. Также обратите внимание на удаленные кавычки вокруг p в port: ant targetPort:

def test = new JsonBuilder()
test {
    ports new File('ports.txt').readLines()*.toInteger().collect { p ->
        [name: "$p-tcp", protocol: "TCP", port: p, targetPort: p]
    }
}
println test.toPrettyString()

Выход:

{
    "ports": [
        {
            "name": "1001-tcp",
            "protocol": "TCP",
            "port": 1001,
            "targetPort": 1001
        }
    ]
}
person Dmitry Khamitov    schedule 30.01.2019
comment
Спасибо Дмитрий. Именно то, что я искал. - person crusadecoder; 30.01.2019