{
  "slug": "json-key-case-convert",
  "name": "gizza-ai/json-key-case-convert",
  "version": "0.1.0",
  "title": "JSON Key Case Converter — camelCase, snake_case, kebab-case — gizza.ai",
  "description": "Rename every JSON key to camelCase, PascalCase, snake_case, kebab-case or SCREAMING_SNAKE_CASE. Values stay untouched. Runs in your browser.",
  "tags": [
    "json key case converter",
    "json camelcase converter",
    "json snake_case keys",
    "convert json keys",
    "json kebab-case keys",
    "rename json keys"
  ],
  "category": "data",
  "urls": {
    "page": "https://gizza.ai/tools/json-key-case-convert/",
    "markdown": "https://gizza.ai/tools/json-key-case-convert/index.md",
    "descriptor": "https://gizza.ai/tools/json-key-case-convert/tool.json",
    "deep_link_example": "https://gizza.ai/tools/json-key-case-convert/?json=%7B%20%22user_id%22%3A%201%2C%20%22profile_data%22%3A%20%7B%20%22first_name%22%3A%20%22ada%22%20%7D%20%7D&target_case=camel&recurse=true&preserve_keys=Content-Type%2C%20X-Api-Key&preserve_prefix=true&indent=2"
  },
  "cli": "gizza tool json-key-case-convert '{ \"user_id\": 1, \"profile_data\": { \"first_name\": \"ada\" } }'",
  "tool": {
    "description": "Rewrite every object key in a JSON document into one naming convention, leaving all values byte-identical. target_case is 'camel' (default), 'pascal', 'snake', 'kebab' or 'constant' (SCREAMING_SNAKE). Splitting is acronym-aware, so userID becomes user_id and HTTPResponse becomes httpResponse. Keys are renamed at every level including inside arrays unless recurse=false; leading sigils like _id and $schema survive unless preserve_prefix=false; preserve_keys lists exact key names to skip. indent is spaces per level (1-8, default 2) or 0 to minify. Invalid JSON is reported with line/column, and two keys that would collide after renaming are an error rather than a silent overwrite. Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "indent": {
          "default": 2,
          "description": "Spaces of indentation per level (1-8) in the output. Use 0 to minify to a single compact line. Default 2.",
          "maximum": 8,
          "minimum": 0,
          "type": "integer"
        },
        "json": {
          "description": "The JSON text whose object keys should be renamed, e.g. {\"user_id\":1,\"profile_data\":{\"first_name\":\"ada\"}}. Values are never modified.",
          "type": "string"
        },
        "preserve_keys": {
          "default": "",
          "description": "Comma-separated exact key names to leave untouched, case-sensitive, e.g. 'Content-Type,_id'. Use it for header names and for objects whose keys are data (ids, dates). Default: none.",
          "type": "string"
        },
        "preserve_prefix": {
          "default": true,
          "description": "Keep a key's leading sigils and convert only the rest, so '_id' stays '_id' and '$schema_url' becomes '$schemaUrl'. Default true; set false to strip them ('_id' becomes 'id').",
          "type": "boolean"
        },
        "recurse": {
          "default": true,
          "description": "Rename keys at every nesting level, including objects inside arrays. Default true. Set false to rename only the outermost object's keys (for a root array, the keys of the objects directly inside it).",
          "type": "boolean"
        },
        "target_case": {
          "default": "camel",
          "description": "Naming convention for every rewritten key: 'camel' (userId, default), 'pascal' (UserId), 'snake' (user_id), 'kebab' (user-id) or 'constant' (SCREAMING_SNAKE, USER_ID).",
          "enum": [
            "camel",
            "pascal",
            "snake",
            "kebab",
            "constant"
          ],
          "type": "string"
        }
      },
      "required": [
        "json"
      ],
      "type": "object"
    }
  }
}