Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Bash中创建JSON数组_Bash_Jq_Amazon Emr_Ash - Fatal编程技术网

如何在Bash中创建JSON数组

如何在Bash中创建JSON数组,bash,jq,amazon-emr,ash,Bash,Jq,Amazon Emr,Ash,我想为emr步骤创建JSON数组。我已经为单个json字符串创建了数组。这是我的bash代码- export source="s3a://sourcebucket" export destination="s3a://destinationbucket" EMR_DISTCP_STEPS=$( jq -n \ --arg source "$source" \ --arg destination "$destination"

我想为emr步骤创建JSON数组。我已经为单个json字符串创建了数组。这是我的bash代码-

export source="s3a://sourcebucket"
export destination="s3a://destinationbucket"

EMR_DISTCP_STEPS=$( jq -n \
                  --arg source "$source" \
                  --arg destination "$destination" \
                  '{
                    "Name":"S3DistCp step",
                    "HadoopJarStep": {
                    "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com", "'"--src=${sourcepath}"'" ,"'"--dest=${destinationpath}"'"],
                    "Jar":"command-runner.jar"
                    },
                     "ActionOnFailure":"CONTINUE"
                   }' )
输出

echo $EMR_DISTCP_STEPS

[{ "Name": "S3DistCp step", "HadoopJarStep": { "Args": [ "s3-dist-cp", "--s3Endpoint=s3.amazonaws.com", "--src=s3a://sourcebucket", "--dest=s3a://destinationbucket" ], "Jar": "command-runner.jar" }, "ActionOnFailure": "CONTINUE" }]
现在我想创建具有多个源和目标的JSON数组 输出


如何在Bash中生成包含多个源和目标JSON字符串的JSON数组?

一种方法是提供一个jq函数,根据您想要修改的特定输入生成重复结构。考虑以下事项:

不管你想怎样生成它——硬编码,由循环构建,等等。 源端对= sourcebucket1:destinationbucket1 sourcebucket2:destinationbucket2 sourcebucket3:destinationbucket3 -R接受纯文本而不是JSON作为输入-n不会自动读取任何输入 …但允许在jq代码中稍后使用输入或输入。 jq-Rn' def指令对$source$目的地:{ 名称:S3DistCp步骤, Hadoop步骤:{ Args:[ 中三区总督察, -s3Endpoint=s3.amazonaws.com, -src=\$source, -dest=\$dest ], Jar:command-runner.Jar } }; [投入 |捕获^?[^:::+:?*$; |选择。 |说明ForPair.source;.dest]
’<一种方法是提供一个jq函数,根据您想要修改的特定输入生成重复结构。考虑以下事项:

不管你想怎样生成它——硬编码,由循环构建,等等。 源端对= sourcebucket1:destinationbucket1 sourcebucket2:destinationbucket2 sourcebucket3:destinationbucket3 -R接受纯文本而不是JSON作为输入-n不会自动读取任何输入 …但允许在jq代码中稍后使用输入或输入。 jq-Rn' def指令对$source$目的地:{ 名称:S3DistCp步骤, Hadoop步骤:{ Args:[ 中三区总督察, -s3Endpoint=s3.amazonaws.com, -src=\$source, -dest=\$dest ], Jar:command-runner.Jar } }; [投入 |捕获^?[^:::+:?*$; |选择。 |说明ForPair.source;.dest]
“<这三个项目应该有什么不同吗?如果是这样,那么用来区分它们的数据应该来自哪里?顺便说一句,请注意不要将语法引号与文字引号混为一谈。也就是说,在包含一个参数“fo”的shell命令中,“引用”是对shell的指令,而不是FoE参数的一部分,并且希望将其从任何JSON或其他更高级别的数据表示中排除。考虑将BASH脚本转换为Python,您将避免沿途有这么多陷阱。…我完全同意,能够表示您试图在内存中操作的结构的语言,以及符合相关格式规范的解析/生成工具,是处理结构化数据的正确工具。也就是说,jq就是这样一种语言,就像Python一样,而且在问题中也碰巧已经被标记了@lucy,…顺便说一句,关于变量名的说明-POSIX指定所有大写名称都保留给修改POSIX定义的实用程序和/或外壳本身行为的变量,而小写名称保留给应用程序使用,并保证不会修改兼容工具的行为。由于未导出的shell变量会修改同名的任何先前存在的环境变量,因此本指南适用于这两种类型;看,第四段。这三个项目应该有什么不同吗?如果是这样,那么用来区分它们的数据应该来自哪里?顺便说一句,请注意不要将语法引号与文字引号混为一谈。也就是说,在包含一个参数“fo”的shell命令中,“引用”是对shell的指令,而不是FoE参数的一部分,并且希望将其从任何JSON或其他更高级别的数据表示中排除。考虑将BASH脚本转换为Python,您将避免沿途有这么多陷阱。…我完全同意,能够表示您试图在内存中操作的结构的语言,以及符合相关格式规范的解析/生成工具,是处理结构化数据的正确工具。也就是说,jq就是这样一种语言,就像Python一样,而且在问题中也碰巧已经被标记了@lucy,…顺便说一句,关于变量名的说明-POSIX指定所有大写名称都保留给修改POSIX定义的实用程序和/或外壳本身行为的变量,而小写名称保留给应用程序使用,并保证不会修改兼容工具的行为。由于未导出的shell变量会修改同名的任何先前存在的环境变量,因此本指南适用于这两种类型;见,第4段。
[{ "Name": "S3DistCp step", "HadoopJarStep": { "Args": [ "s3-dist-cp", "--s3Endpoint=s3.amazonaws.com", "--src=s3a://sourcebucket1", "--dest=s3a://destinationbucket1" ], "Jar": "command-runner.jar" }, "ActionOnFailure": "CONTINUE" },
{ "Name": "S3DistCp step", "HadoopJarStep": { "Args": [ "s3-dist-cp", "--s3Endpoint=s3.amazonaws.com", "--src=s3a://sourcebucket2", "--dest=s3a://destinationbucket2" ], "Jar": "command-runner.jar" }, "ActionOnFailure": "CONTINUE" },
{ "Name": "S3DistCp step", "HadoopJarStep": { "Args": [ "s3-dist-cp", "--s3Endpoint=s3.amazonaws.com", "--src=s3a://sourcebucket3", "--dest=s3a://destinationbucket3" ], "Jar": "command-runner.jar" }, "ActionOnFailure": "CONTINUE" }]
[
  {
    "Name": "S3DistCp step",
    "HadoopJarStep": {
      "Args": [
        "s3-dist-cp",
        "--s3Endpoint=s3.amazonaws.com",
        "--src=sourcebucket1",
        "--dest=destinationbucket1"
      ],
      "Jar": "command-runner.jar"
    }
  },
  {
    "Name": "S3DistCp step",
    "HadoopJarStep": {
      "Args": [
        "s3-dist-cp",
        "--s3Endpoint=s3.amazonaws.com",
        "--src=sourcebucket2",
        "--dest=destinationbucket2"
      ],
      "Jar": "command-runner.jar"
    }
  },
  {
    "Name": "S3DistCp step",
    "HadoopJarStep": {
      "Args": [
        "s3-dist-cp",
        "--s3Endpoint=s3.amazonaws.com",
        "--src=sourcebucket3",
        "--dest=destinationbucket3"
      ],
      "Jar": "command-runner.jar"
    }
  }
]