首页 > 解决方案 > 将 JSON 文件中的关键字/值对组合成单个 JSON 以使用 curl 提交

问题描述

我想在“字段”中添加一个数组我该怎么做?

如何添加“字段”数组?

fields=()
for f in NameData/*.json
do
        Name= cat $f | jq -r '.[] | .Name'
        Value= cat $f | jq -r '.[] | .Value'
        
        fields+= #how? 
        '{
            "name" : "'$Name'",
            "value": "'$Value'"
        },'
done

#字段输出

{
    "name" : "Test"
    "value" : "1"
},
{
    "name" : "Test2"
    "value" : "2"
},
...

因为在旁边发帖

function Hi(){
    curl -H "Content-Type: application/json" -X POST -d \
        '{
                    #how to array in fields //while?
            "fields": [
                    {
                        "name": "Test",
                        "value":"'1'",
                    },
                    {
                        "name": "Test2",
                        "value":"'2'",
                    }
                    ...
                ]
        ...
}}

我如何需要提供更多详细信息?你能帮助我吗?谢谢。

我在这里的文件(JSON)就像我正在尝试获取名称和值

xample.json
[
    ...
    {
        "folder" : "nobody",
        "name": "1TS",
        "value": "2",
        ...
    }
]
example2.json
[
    {
        "name": "TST",
        "value": "4.75",
        ...
    }
]

标签: jsonlinuxbashcurl

解决方案


Bash 数组只是字符串的集合。可能只是收集键/值对,然后通过将其格式化为 JSON 来完成。

fields=()
for f in NameData/*.json
do
        fields+=$(jq -r '.[] | {name: .name, value: .value}' "$f") 
done

另请注意,您如何需要命令替换来运行命令并将其输出分配给变量,以及我们如何避免无用cat的,只需一次jq调用即可提取两个字段。

但可能更好的解决方案就是jq直接使用。

curl -H "Content-Type: application/json" -X POST -d "$(
    jq -s '{ fields: map({name: .[0].name, value: .[0].value})}' NameData/*.json)"

推荐阅读