无效的JSON双引号错误。如果我已经有了双引号,如何更正语法?
我有一个用JSON读取这一特定部分的脚本。 有关章节为:无效的JSON双引号错误。如果我已经有了双引号,如何更正语法?,json,amazon-web-services,boto3,Json,Amazon Web Services,Boto3,我有一个用JSON读取这一特定部分的脚本。 有关章节为: def amifunc2(instance_id): client = boto3.client('ssm', region_name = 'us-east-1') ec2_response = client.send_command( InstanceIds=[ instance_id ], DocumentName='
def amifunc2(instance_id):
client = boto3.client('ssm', region_name = 'us-east-1')
ec2_response = client.send_command(
InstanceIds=[
instance_id
],
DocumentName='AWS-RunShellScript',
Parameters={
'commands': [
'#!/bin/bash',
---
'admin_users=( user.number.1 user.number.2 user.number.3 user.number.4 )',
'for i in ${admin_users[@]}; do aws ssm send-command --document-name "arn:aws:ssm:doc-name" --targets "Key=instanceids,Values=$instance_id" --parameters "{"\""username"\"":["\""$i"\""]}" --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region us-east-1 --query "Command.CommandId"; sleep 5; done',
我运行此命令并获得:
Error parsing parameter '--parameters': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {username:[user.number.1]}
Error parsing parameter '--parameters': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {username:[user.number.2]}
Error parsing parameter '--parameters': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {username:[user.number.3]}
Error parsing parameter '--parameters': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
JSON received: {username:[user.number.4]}
第一部分的参数部分就是问题所在。我尝试了所有双引号组合,但AWS控制台将其报告为无效的JSON格式。我的语法有什么问题?这可以通过使用单引号(
“
)和双引号(“
)的组合来实现,这允许按预期回显值,因此参数将被包装在\'“{”用户名“:[“\'$i\']}”
中
下面是一个工作片段
def amifunc2(instance_id):
client = boto3.client('ssm', region_name = 'us-east-1')
ec2_response = client.send_command(
InstanceIds=[
instance_id
],
DocumentName='AWS-RunShellScript',
Parameters={
'commands': [
'#!/bin/bash',
---
'admin_users=( user.number.1 user.number.2 user.number.3 user.number.4 )',
'for i in ${admin_users[@]}; do aws ssm send-command --document-name "arn:aws:ssm:doc-name" --targets "Key=instanceids,Values=$instance_id" --parameters \'"{"username":["\'$i\'"]}"\' --timeout-seconds 600 --max-concurrency "50" --max-errors "0" --region us-east-1 --query "Command.CommandId"; sleep 5; done',
再看一遍。代码在中使用了循环
for i,然后接收管理员用户列表,并将其放入--参数“{\”“username\\:[“\”“$i\”“]}”
部分。这些引号由shell解释。将arg用单引号括起来。这不够吗?“{\”“username\\:[\“$i\”“]”“
是的,应该可以,而且--参数“{\”username\”:[\“$i\”]}”
是一个稍微不复杂的版本。与SSM本身相关的某些内容可能是由于某些原因导致SSM不起作用,我应该检查SSM什么?