Как передать динамические c значения в JSON с повторяющимися полями - PullRequest
1 голос
/ 07 мая 2020

У меня есть вариант использования, когда мне нужно отправить REST-запрос сразу.

JSON Файл: emp. json

[
    {
        "field": {
            "empID": "sapid",
            "location": "India"
        }
    }
]

Мой сценарий оболочки:

func emp_details
{
START=1
END=1000000
CURRENT=1
while [ $END -gt $CURRENT ];
do
CURRENT=$((CURRENT+1))
cat emp.json | jq --arg new "$CURRENT" '.[].field.empID |= $new' > temp.json
cat temp.json
curl <REST Server URL with temp.json as input> "Content-Type: application/json" -d @temp.json
done
}

Вышеупомянутый json и скрипт работают. Я могу правильно отправить запрос. Я ищу способ подготовить файл json с множеством empID перед запуском CURL.

Например:

[
    {
        "field": {
            "empID": "sapid",
            "location": "India",            
        }
    },
    {
        "field": {
            "empID": "sapid",
            "location": "India",            
        }
    },
    {
        "field": {
            "empID": "sapid",
            "location": "India",            
        }
    }
]

Но я не уверен, как пройти через каждый отдельный empID поле и замените его значение динамическими c текущими значениями.

Любая помощь приветствуется

Ответы [ 2 ]

3 голосов
/ 07 мая 2020

Вы ищете встроенную range.

.[] | [.field.empID = range(1;1000000)]

демонстрацию на jqplay.org

2 голосов
/ 07 мая 2020

Для этого вам вообще не нужна обработка bash. Вы можете использовать функцию range() в jq для создания диапазона чисел от 1 до миллиона и создания нескольких объектов с помощью функции reduce()

jq -n 'reduce range(1; 1000000) as $data (.; . + [{"field": { "empID": $data, "location": "India"}}])'

Это создает миллион объектов внутри массива с empID установить, начиная с 1. Измените значение внутри range(), чтобы настроить числа.

...