)
+def normalize_jsonpath(json_path_expression):
+ """
+ Normalizes JSONPath expressions from kubectl format to jsonpath_ng format.
+ Example:
+ - '{.name}' becomes 'name'
+ - '{.items[0].metadata.name}' becomes 'items[0].metadata.name'
+ """
+ # Remove braces at the beginning and end
+ if json_path_expression.startswith("{") and json_path_expression.endswith("}"):
+ json_path_expression = json_path_expression[1:-1]
+ # Remove the leading '.'
+ if json_path_expression.startswith("."):
+ json_path_expression = json_path_expression[1:]
+ return json_path_expression
+
+
def print_output(format="table", headers=["field", "value"], rows=None, data=None):
"""
Prints content in specified format.
elif format.startswith("jsonpath="):
# JSONPath expression
json_path_expression = format.partition("=")[-1]
- logger.debug(f"Jsonpath expression: {json_path_expression}")
+ logger.debug(f"Received jsonpath expression: {json_path_expression}")
+ # Support kubectl format
+ if json_path_expression.startswith("{") and json_path_expression.endswith(
+ "}"
+ ):
+ logger.debug("Detected kubectl JSONPath format")
+ json_path_expression = normalize_jsonpath(json_path_expression)
+ logger.debug(f"Final jsonpath expression: {json_path_expression}")
json_path = parse(json_path_expression)
# Apply JSONPath expression on the JSON object
results = [match.value for match in json_path.find(data)]