HirenP
HirenP

Reputation: 121

How to escape JSON in YAML

Following command works on bash shell but YAML parser (bitbucket-pipelines.yaml) reports it as invalid syntax

https://bitbucket-pipelines.atlassian.io/validator

- export TASK_VERSION=$(aws ecs register-task-definition --family MyTask --container-definitions "[{\"name\":\"MyContainer\",\"image\":\"1234567.dkr.ecr.us-west-1.amazonaws.com/ecs-repository:1.0.13\",\"cpu\":50,\"portMappings\": [{\"hostPort\": 80,\"containerPort\": 80,\"protocol\":\"tcp\"}],\"memory\":300}]" | jq --raw-output '.taskDefinition.revision')

Even though I have escaped all double quotes using \ char, I think [ and { are throwing it off.

Any ideas?

Upvotes: 2

Views: 5724

Answers (1)

Greg
Greg

Reputation: 23463

I assume the line in question is part of a larger, validly structured bitbucket-pipelines.yaml file.

Try placing the script in a block scalar.

- |
  export TASK_VERSION=$(aws ecs register-task-definition --family MyTask --container-definitions "[{\"name\":\"MyContainer\",\"image\":\"1234567.dkr.ecr.us-west-1.amazonaws.com/ecs-repository:1.0.13\",\"cpu\":50,\"portMappings\": [{\"hostPort\": 80,\"containerPort\": 80,\"protocol\":\"tcp\"}],\"memory\":300}]" | jq --raw-output '.taskDefinition.revision')

Upvotes: 6

Related Questions