JSON结构固定时,JSONPath匹配结果的顺序是否具有稳定性?
问题:JSONPath匹配结果的顺序是否稳定?
假设JSON字符串的结构保持不变,使用JSONPath匹配得到的结果值顺序是否稳定?
import jsonpath_ng response = json.loads(response) jsonpath_expression_name = jsonpath_ng.parse("$[forms][0][questionGroups][*][questions]..[name]") match_name = [match.value for match in jsonpath_expression_name.find(response)] jsonpath_expression_id = jsonpath_ng.parse("$[forms][0][questionGroups][*][questions]..[id]") matches_id = [match.value for match in jsonpath_expression_id.find(response)] survey_q_dict = { k:v for (k,v) in zip(matches_id, match_name)}
回答
- 对于
jsonpath-ng库,只要原始JSON的结构完全固定,匹配结果的顺序是稳定的。 - 该库按JSON结构的深度优先遍历顺序返回匹配结果,只要原始数据的层级、数组元素顺序、字典键的顺序(Python 3.7及以上版本字典键默认有序)保持不变,两次匹配的结果顺序就完全一致。
- 你代码里用
zip(matches_id, match_name)构建字典的方式是可靠的,对应的id和name会按相同顺序被提取,不会出现对应关系错乱的问题。
内容的提问来源于stack exchange,提问作者Clay Campbell
相关产品推荐
相关产品推荐

