跳转至

Json.to_or

template<typename T, typename D = Nul>
requires convertible<Json, T> || convertible_map<Json, T, D> || convertible_array<Json, T, D>
T  to_or( T default_result, D default_range_elem = D{} ) const noexcept;

Converts internal data to type T (copy) and returns the provided default value on failure.

Extensive compile-time type checking ensures incompatible branches are eliminated during compilation.
Note: Runtime conversion may still fail due to JSON's dynamic typing, despite template instantiation being valid.

Important: This function doesn't handle allocation failures or constructor exceptions - these will propagate normally.

Conversion Rules

  1. Nul → Nul
  2. Obj → Obj
  3. Arr → Arr
  4. Str → Str
  5. Bol → Bol
  6. Num → Enum (rounded to nearest integer)
  7. Num → Integer types (rounded)
  8. Num → Floating-point types
  9. Any → Types with Json constructors
  10. Obj → Implicitly convertible types
  11. Arr → Implicitly convertible types
  12. Str → Implicitly convertible types
  13. Num → Implicitly convertible types
  14. Bol → Implicitly convertible types
  15. Nul → Implicitly convertible types (except bool)
  16. Obj → Convertible key-value types (element-wise)
  17. Arr → Convertible container types (element-wise)
  18. Returns provided default value

Parameters

  • T: Target type
  • default_result: Fallback value returned on conversion failure
  • default_range_elem: Fallback value for failed element conversions (array/object only)

Exception Safety

No-throw guarantee.

Complexity

Linear time O(n) (full copy required)

Key characteristics: - Never throws for type mismatches (uses default value) - Still propagates memory/constructor exceptions - Same conversion rules as other variants but with default fallback -

Version

Since v3.0.0 .