AWS Step Functions:如何将JSON值作为JSONPath的一部分使用?
动态键获取JSON中对应值的实现方案
给定如下JSON数组,需要以第一个元素中ChallengeData.Answer的值为键,获取第二个元素CurrentHashes中对应的数值:
[ { "ChallengeData": { "Answer": "d00b2151c0ee4b4cc688e0377940981a" }, "ChallengeHash": "e3acc830b1de2b06a4040654ba6a2e4a" }, { "CurrentHashes": { "d00b2151c0ee4b4cc688e0377940981a": 0, "673b352ffb77d08ea9953cc24907b5b3": 1, "c8fd8f2484063948c1cc7ec48ea2db0f": 2, "9d73f4c8620cf0e17b4c98e3272e2bff": 3 } } ]
以下是不同环境下的实现方法:
1. 命令行环境(使用jq工具)
直接执行以下命令即可获取结果:
jq '.[1].CurrentHashes[.[0].ChallengeData.Answer]' your-json-file.json
解释:.[0]定位到数组第一个元素,提取ChallengeData.Answer的值作为键;.[1].CurrentHashes定位到第二个元素的哈希对象,通过方括号语法传入动态键获取对应值。
2. JavaScript/Node.js环境
通过动态属性访问实现:
// 假设已解析得到JSON数据(或从文件/接口读取后解析) const jsonData = [ { "ChallengeData": { "Answer": "d00b2151c0ee4b4cc688e0377940981a" }, "ChallengeHash": "e3acc830b1de2b06a4040654ba6a2e4a" }, { "CurrentHashes": { "d00b2151c0ee4b4cc688e0377940981a": 0, "673b352ffb77d08ea9953cc24907b5b3": 1, "c8fd8f2484063948c1cc7ec48ea2db0f": 2, "9d73f4c8620cf0e17b4c98e3272e2bff": 3 } } ]; // 提取动态键并取值 const answerKey = jsonData[0].ChallengeData.Answer; const targetValue = jsonData[1].CurrentHashes[answerKey]; console.log(targetValue); // 输出:0
注意:动态键必须使用方括号[]访问,不能用点语法(点语法仅适用于已知的固定键名)。
3. Python环境
利用字典的键访问特性实现:
import json # 从字符串解析JSON(或从文件读取后解析) json_str = ''' [ { "ChallengeData": { "Answer": "d00b2151c0ee4b4cc688e0377940981a" }, "ChallengeHash": "e3acc830b1de2b06a4040654ba6a2e4a" }, { "CurrentHashes": { "d00b2151c0ee4b4cc688e0377940981a": 0, "673b352ffb77d08ea9953cc24907b5b3": 1, "c8fd8f2484063948c1cc7ec48ea2db0f": 2, "9d73f4c8620cf0e17b4c98e3272e2bff": 3 } } ] ''' json_data = json.loads(json_str) # 提取键并获取对应值 answer_key = json_data[0]['ChallengeData']['Answer'] target_value = json_data[1]['CurrentHashes'][answer_key] print(target_value) # 输出:0
内容的提问来源于stack exchange,提问作者Denny Crane
相关产品推荐
相关产品推荐

