使用AWS CLI更新Step Function时遭遇JSON解析错误求助
解决AWS Step Functions CLI更新时的JSON解析错误
我之前在Windows上用AWS CLI时也遇到过一模一样的JSON解析问题,咱们来拆解下问题出在哪以及怎么解决:
1. 核心问题:嵌套JSON的引号未正确处理
你提交的JSON文件里,definition字段的值本身是一个完整的JSON状态机定义,但你把它当成字符串放在外层JSON里时,内部的双引号没有转义,这直接导致JSON解析器无法正确识别结构——这就是报错里"无效控制字符"的根源(其实是解析器把未转义的双引号当成了外层JSON的结构分界)。
错误的写法
{ "stateMachineArn": "arn:aws:states:us-west-2:xxxxx", "definition": "{ "Comment": "A TEST example...", ... }", "roleArn": "iam_role" }
正确的两种写法
写法一:直接嵌套JSON对象(推荐)
AWS CLI的--cli-input-json支持直接嵌套JSON结构,不需要把definition转成字符串,这样完全不用处理引号转义:
{ "stateMachineArn": "arn:aws:states:us-west-2:xxxxx", "definition": { "Comment": "A TEST example of the Amazon States Language using Pass states", "StartAt": "Hello", "States": { "Hello": { "Type": "Pass", "Result": "Hello", "Next": "World" }, "World": { "Type": "Pass", "Result": "World", "End": true } } }, "roleArn": "arn:aws:iam::xxxxx:role/your-actual-role-name" }
写法二:转义内部双引号(如果坚持用字符串格式)
如果你一定要把definition作为字符串传递,需要给内部所有双引号加上反斜杠转义:
{ "stateMachineArn": "arn:aws:states:us-west-2:xxxxx", "definition": "{ \"Comment\": \"A TEST example of the Amazon States Language using Pass states\", \"StartAt\": \"Hello\", \"States\": { \"Hello\": { \"Type\": \"Pass\", \"Result\": \"Hello\", \"Next\": \"World\" }, \"World\": { \"Type\": \"Pass\", \"Result\": \"World\", \"End\": true } } }", "roleArn": "arn:aws:iam::xxxxx:role/your-actual-role-name" }
2. 修复Windows路径的格式问题
在Windows系统中,CLI命令里的路径反斜杠\会被解析为转义字符,所以需要改成正斜杠/或者双反斜杠\\:
修正后的命令
# 写法一:用正斜杠 aws stepfunctions update-state-machine --cli-input-json file://C:/Users/nufardo/Desktop/test.json # 写法二:用双反斜杠 aws stepfunctions update-state-machine --cli-input-json file://C:\\Users\\nufardo\\Desktop\\test.json
3. 提前验证JSON合法性(可选但推荐)
修改完JSON后,你可以用Windows自带的PowerShell快速验证格式是否正确:
Get-Content C:\Users\nufardo\Desktop\test.json | ConvertFrom-Json
如果命令执行后没有报错,且能正常输出JSON结构,说明格式没问题。
按照上面的步骤调整后,再执行AWS CLI命令应该就能成功更新你的状态机了。
内容的提问来源于stack exchange,提问作者Nufar Dory
相关产品推荐
相关产品推荐

