Class: Canon::Validators::JsonValidator

Inherits:
BaseValidator show all
Defined in:
lib/canon/validators/json_validator.rb

Overview

Validator for JSON input

Validates JSON input using Ruby’s JSON parser. Raises detailed ValidationError with position information when malformed JSON is detected.

Class Method Summary collapse

Methods inherited from BaseValidator

extract_location

Class Method Details

.validate!(input) ⇒ void

This method returns an undefined value.

Validate JSON input

Parameters:

  • input (String)

    The JSON string to validate

Raises:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/canon/validators/json_validator.rb', line 19

def self.validate!(input)
  return if input.nil?
  return if input.is_a?(Hash) || input.is_a?(Array) # Already parsed
  return if input.strip.empty?

  JSON.parse(input)
rescue JSON::ParserError => e
  # Extract position from error message
  position = extract_position(e.message)

  raise Canon::ValidationError.new(
    clean_error_message(e.message),
    format: :json,
    line: position[:line],
    column: position[:column],
    details: extract_context(input, position),
  )
end