Недопустимая ошибка JSON двойных кавычек. Как исправить синтаксис, если у меня уже есть двойные кавычки? - PullRequest
1 голос
/ 04 августа 2020

У меня есть сценарий, который читает именно этот раздел в 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. В чем проблема с моим синтаксисом?

1 Ответ

2 голосов
/ 04 августа 2020

Это можно сделать, используя комбинацию одинарных кавычек (') и двойных кавычек ("), что позволяет отображать значения по назначению, так что параметры будут заключены в \'"{"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',
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...