/usr/bin/jq:参数列表太长错误bash
我想从更大的swagger.json文件内容中替换示例json中的值,但它太大了/usr/bin/jq:参数列表太长错误bash,bash,jq,Bash,Jq,我想从更大的swagger.json文件内容中替换示例json中的值,但它太大了 Error: /usr/bin/jq: Argument list too long error bash 为解决此问题工作了几天,但在此无法确定问题。 这是示例json文件: { "name": "", "description": "", "context": "", "version": "", "provider": "cbs", "apiDefinition": "
Error:
/usr/bin/jq: Argument list too long error bash
为解决此问题工作了几天,但在此无法确定问题。
这是示例json文件:
{
"name": "",
"description": "",
"context": "",
"version": "",
"provider": "cbs",
"apiDefinition": "",
"wsdlUri": null,
"responseCaching": "Disabled",
"cacheTimeout": 300,
"destinationStatsEnabled": false,
"isDefaultVersion": true,
"transport": [
"http",
"https"
],
"tags": ["PROVIDER_","MIFE"],
"tiers": ["Unlimited","Default","Silver","Subscription","Gold","Premium","Bronze"],
"maxTps": {
"sandbox": 5000,
"production": 1000
},
"visibility": "PUBLIC",
"visibleRoles": [],
"endpointConfig": "",
"endpointSecurity": {
"username": "user",
"type": "basic",
"password": "pass"
},
"gatewayEnvironments": "Production and Sandbox",
"sequences": [],
"subscriptionAvailability": null,
"subscriptionAvailableTenants": [],
"businessInformation": {
"businessOwnerEmail": "BUSINESSOWNEREMAIL_",
"technicalOwnerEmail": "TECHNICALOWNEREMAIL_",
"technicalOwner": "TECHNICALOWNER_",
"businessOwner": "BUSINESSOWNER_"
},
"corsConfiguration": {
"accessControlAllowOrigins": ["*"],
"accessControlAllowHeaders": [
"authorization",
"Access-Control-Allow-Origin",
"Content-Type",
"SOAPAction"
],
"accessControlAllowMethods": [
"GET",
"PUT",
"POST",
"DELETE",
"PATCH",
"OPTIONS"
],
"accessControlAllowCredentials": false,
"corsConfigurationEnabled": false
}
}
- swagger.json文件-
swagger = $(cat swagger.json)
jq -r --arg swagger "$swagger" '.apiDefinition = $swagger' <<<"$json"
swagger=$(cat swagger.json)
jq-r--arg-swagger“$swagger”'.apiDefinition=$swagger'Q没有明确说明如何设置$swagger
,但似乎与其使用--arg-swagger$swagger
,不如使用一个面向文件的命令行选项,可能是:
--argfile swagger swagger.json
有很多选择,但要在这里明智地探索这些,最好至少提供一个完整但非常小的示例。(本例不必说明“参数列表过长”错误!)
警告
如果您担心--argfile
选项不受欢迎,那么如果您的jq
有--slurpfile
选项,请务必使用--slurpfile
,但请注意后一个选项将文件内容包装到JSON数组中,因此您必须考虑到这一点
这些选项和其他选项都在您的示例的官方文档中简要介绍:
jq -r --arg swagger "$swagger" '.apiDefinition = $swagger' <<<"$json"
结果输出的前10行:
{
"apiDefintion": [
{
"id": 1,
"first_name": "Samson",
"last_name": "Wandrack",
"email": "swandrack0@hibu.com",
"gender": "Male",
"ip_address": "122.171.218.251"
},
- -在这种情况下,需要使用命令行上的JSON作为输入JSON,而不是从stdin或文件中读取它
- --slurpfile将swagger.json的内容作为数组放入变量$swagger中
- -r是不需要的,因为它没有效果,除非输出只是字符串(并且它的原始输出使其无效)
- $swagger[0]仅用于包含slurped数组的第一项
从以下地址的文档:
--空输入/-n:
根本不要读取任何输入!相反,使用null作为输入运行一次过滤器。当使用jq作为简单的计算器或从头构造JSON数据时,这非常有用
--slurpfile变量名文件名:
此选项读取命名文件中的所有JSON文本,并将解析的JSON值数组绑定到给定的全局变量。如果使用--slurpfile foo bar运行jq,那么$foo在程序中可用,并且有一个数组,其元素对应于名为bar的文件中的文本
--原始输出/-r:
使用此选项,如果过滤器的结果是字符串,那么它将直接写入标准输出,而不是格式化为带引号的JSON字符串。这对于使jq过滤器与非基于JSON的系统进行通信非常有用
你为什么要删掉剧本的那部分?你能把它寄回去吗?告诉我们如何重现这个问题?同时发布您正在尝试此操作的jq
版本。我想用swagger.json values.jq-commandline json processor[version 1.5-1-a5b5cbe]替换apiDefinition关键字值。如果文件太长,请将其发布到外部文件repo中并链接到此处抱歉!无法共享:(swagger=$(cat swagger.json)root@mife-kubernetes master:/home/svradmin/jsontest#jq-r--slurpfile-swagger“$swagger”。apiDefinition=$swagger'
{
"apiDefintion": [
{
"id": 1,
"first_name": "Samson",
"last_name": "Wandrack",
"email": "swandrack0@hibu.com",
"gender": "Male",
"ip_address": "122.171.218.251"
},