如何使用重复字段将动态值传递给JSON

如何使用重复字段将动态值传递给JSON,json,bash,shell,jq,Json,Bash,Shell,Jq,我有一个用例,我必须批量发送REST请求 JSON文件:emp.JSON [ { "field": { "empID": "sapid", "location": "India" } } ] 我的shell脚本: func emp_details { START=1 END=1000000 CURRENT=1 while [ $END -gt $CURRENT ]; do CURRENT=$((CU

我有一个用例,我必须批量发送REST请求

JSON文件:emp.JSON

[
    {
        "field": {
            "empID": "sapid",
            "location": "India"
        }
    }
]
我的shell脚本:

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
}
但我不知道如何遍历每个empID字段并用动态当前值替换其值


非常感谢您提供的任何帮助

对于此,您根本不需要
bash
处理。您可以使用
jq
中的
range()
函数创建从100万到100万的数字范围,并使用
reduce()
函数创建多个对象

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

这将在数组中创建一百万个设置了
empID
的对象,从1开始。修改
range()
中的值以自定义数字。

对此,您根本不需要
bash
处理。您可以使用
jq
中的
range()
函数创建从100万到100万的数字范围,并使用
reduce()
函数创建多个对象

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

这将在数组中创建一百万个设置了
empID
的对象,从1开始。修改
range()
内的值以自定义数字。

您正在查找内置的
范围

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

您正在寻找内置的
范围

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

您的期望是什么?您想将
empID
从1到1000000作为JSON对象吗?在一个JSON中发送它们?是的,正确。我希望将动态值从shell传递到JSON文件。或者使用增量值中的empID来准备JSON文件的任何其他方法也会帮助您创建1000000个对象,以
empID
as 1开始?否。我希望创建1000000个对象,empID值从1开始,以1000000结束。您确定您的接收者程序可以处理100万个对象?您的期望是什么?您想将
empID
从1到1000000作为JSON对象吗?在一个JSON中发送它们?是的,正确。我希望将动态值从shell传递到JSON文件。或者使用增量值中的empID来准备JSON文件的任何其他方法也会帮助您创建1000000个对象,以
empID
as 1开始?否。我希望创建1000000个对象,empID值从1开始,以1000000结束。您确定您的接收者程序可以处理100万个对象?
jq-n'reduce range(1;1000000)为$data(.;+[{“field”:{“empID”:$data,“location”:“India”}])|wc-c
→ <代码>78888819
这将生成76M JSON。使用
-cn
:→ <代码>45888851
44M。通过发送压缩数据可以节省更多信息:
jq-cn…| gzip | curl--data binary-H“Content Type:application/json”-H“Content Encoding:gzip”-X POSThttps://api.example.com/submit
→ <代码>2556262字节或2.5M。也许值得,很好用。这就是我一直在寻找的解决方案。感谢you@L艾格里斯:谢谢你的评论。让OP来调整他想如何发送唱片。因为我听说他们可能不会将全部100万条记录
jq-n'reduce range(1;1000000)作为$data(.;.+[{“field”:{“empID”:$data,“location”:“India”}])发送。| wc-c
→ <代码>78888819这将生成76M JSON。使用
-cn
:→ <代码>4588885144M。通过发送压缩数据可以节省更多信息:
jq-cn…| gzip | curl--data binary-H“Content Type:application/json”-H“Content Encoding:gzip”-X POSThttps://api.example.com/submit
→ <代码>2556262字节或2.5M。也许值得,很好用。这就是我一直在寻找的解决方案。感谢you@L艾格里斯:谢谢你的评论。让OP来调整他想如何发送唱片。因为我听说他们可能不会发送100万张唱片