json - 在 json 中插入一个 json 文件
问题描述
我想知道一种将 json 插入 json 的快速方法。
$ cat source.json
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"environment": [
{
"name": "SERVICE_MANIFEST",
"value": ""
},
{
"name": "SERVICE_PORT",
"value": "4321"
}
]
}
]
}
SERVICE_MANIFEST 是另一个 json 文件的内容
$ cat service_manifest.json
{
"connections": {
"port": "1234"
},
"name": "foo"
}
我尝试使用 jq 命令来实现
cat service_manifest.json |jq --arg SERVICE_MANIFEST - < source.json
但是好像不行
有任何想法吗?最终结果仍然应该是一个有效的 json 文件
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"environment": [
{
"name": "SERVICE_MANIFEST",
"value": {
"connections": {
"port": "1234"
},
"name": "foo"
}
},
...
]
}
],
...
}
更新。
谢谢,这是我从您的示例中运行的命令。
$ jq --slurpfile sm service_manifest.json '.containerDefinitions[].environment[] |= (select(.name=="SERVICE_MANIFEST").value=$sm)' source.json
但结果是一个数组,而不是列表。
{
"AWSEBDockerrunVersion": 2,
"containerDefinitions": [
{
"environment": [
{
"name": "SERVICE_MANIFEST",
"value": [
{
"connections": {
"port": "1234"
},
"name": "foo"
}
]
},
{
"name": "SERVICE_PORT",
"value": "4321"
}
]
}
]
}
解决方案
你可以试试这个jq
命令:
jq --slurpfile sm SERVICE_MANIFEST '.containerDefinitions[].environment[] |= (select(.name=="SERVICE_MANIFEST").value=$sm[])' file
--slurpfile
将文件的内容分配给变量sm
过滤器仅在具有as.containerDefinitions[].environment[]
的元素上将数组替换为文件的内容。SERVICE_MANIFEST
name
推荐阅读
- java - 如果没有休眠生成的 @Id 值,休眠 @SelectBeforeUpdate(false) 将不起作用
- apache-spark - 当 parquet 用于压缩时,列名中的空格会引发异常
- sql - 从通过 GROUP BY 获得的数据子集中 SELECT MIN
- python - 有没有用python一次去噪多个图像的功能
- javascript - 检查javascript中的二维矩阵中是否存在字符串?
- datatables - DataTables 导出 PDF,从未编辑的数据库中导出原始数据
- web - Tizen Web Widget,从后台启动应用程序到前台
- c - 调用内联函数时如何更改所有调用函数的优化?
- java - 过滤地图
> 到地图 - python - requests.exceptions.InvalidSchema:缺少对 SOCKS 支持的依赖项