繁体   English   中英

无效 JSON 双引号错误。 如果我已经有双引号,我该如何更正我的语法?

[英]Invalid JSON double quotes error. How can I correct my syntax if i already have double quotes?

我有一个脚本可以读取 JSON 中的这一特定部分。有问题的部分是:

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 格式。 我的语法有什么问题?

这可以通过使用单引号 ( ' ) 和双引号 ( " ) 的组合来完成,这样可以按预期回显值,因此参数将包含在\'"{"username":["\'$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',

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM