尝试在shell中将json对象格式化为适当的DynamoDB格式
{ "200": 1728, "201": 288, "301": 214, "401": 104, "404": 12 }
我最初有一个脚本,我认为是正确的格式,但检索的数据是动态的,因为它可以有任意数量的键
jq -r '.codes' item.json | jq --slurp '{Codes:{M: .[]}}'
输出
{"Codes": {"M": { "200": 1728, "201": 288, "301": 214, "401": 104, "404": 12 }}}
DynamoDB格式,一个静态的字段是" N",但是数字必须格式化为字符串,我可以在初始过滤器中做到这一点
{"Codes": {"M": { "200": {"N": "1728"}, "201": {"N": "288"}, "301": {"N": "214"}, "401": {"N": 104}, "404": {"N": "12"} }}}
我花了4天的时间尝试获取到目前为止所获得的内容,并且因为格式正确而陷入困境
答案 0 :(得分:1)
正如我所理解的那样,你所缺少的谜题是能够将JSON对象{key1:value1,key2:value2,...}转换为以下形式的对象:{key1 :{" N":(value1 | tostring)},...
这可以使用过滤器完成:
to_entries | map( {(.key): {N: (.value|tostring)}} ) | add;
将此功能包装到命名函数中可能是值得的:
def package: to_entries | map( {(.key): {N: (.value|tostring)}} ) | add;
然后可以写出问题的解决方案(据我所知):
{Codes: {M: package}}
输入:
{ "200": 1728, "201": 288, "301": 214, "401": 104, "404": 12 }
输出:
{
"Codes": {
"M": {
"200": {
"N": "1728"
},
"201": {
"N": "288"
},
"301": {
"N": "214"
},
"401": {
"N": "104"
},
"404": {
"N": "12"
}
}
}
}