Grafana Panels ============== Extract the list of panel titles from a Grafana dashboard JSON. Each panel title is located at spec.elements.panel-N.spec.title, where "panel-N" uses a numeric suffix (for example, "panel-1" or "panel-3"). :: import json import re from typing import Dict, List, Optional import sys Command-line argument: path to Grafana dashboard JSON file :: if len(sys.argv) != 2: print("Usage: python grafana_panels.py ") sys.exit(1) grafana_json_path = sys.argv[1] Extracts panel titles located at spec -> elements -> "panel-N" -> spec -> title. Returns a list of titles (in no particular order). Skips panels without titles. :: def extract_panel_titles(dashboard: Dict) -> List[str]: titles: List[str] = [] elements = dashboard.get("spec", {}).get("elements", {}) if not isinstance(elements, dict): return titles for key, panel_obj in elements.items(): if re.match(r"^panel-\d+$", key) and isinstance(panel_obj, dict): title: Optional[str] = panel_obj.get("spec", {}).get("title") if isinstance(title, str): titles.append(title) return titles Load a dashboard JSON file and print the titles :: if __name__ == "__main__": with open(grafana_json_path, "r", encoding="utf-8") as f: dashboard_json = json.load(f) titles = extract_panel_titles(dashboard_json) print("=== Panel titles") for t in titles: print("1. ", t) print("----------------------------")