From cd7c501ed7bfb74cb88f074ae7e624d11444c6b1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 10 Jul 2026 18:52:57 +0100 Subject: Don't raise errors from _jv_to_python() --- jq.pyx | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/jq.pyx b/jq.pyx index 0b8e6e6..0f674d2 100644 --- a/jq.pyx +++ b/jq.pyx @@ -106,9 +106,11 @@ cdef extern from "jq.h": void jq_get_error_cb(jq_state *, jq_err_cb *, void **) -cdef object _jv_to_python(jv value): +cdef object _jv_to_python(jv value) noexcept: """Unpack a jv value into a Python value. + Invalid values are treated as nulls. + Consumes the input value.""" cdef jv_kind kind = jv_get_kind(value) @@ -119,14 +121,17 @@ cdef object _jv_to_python(jv value): cdef double number_value if kind == JV_KIND_INVALID: - jv_free(value) - raise ValueError("Invalid value") + python_value = None + elif kind == JV_KIND_NULL: python_value = None + elif kind == JV_KIND_FALSE: python_value = False + elif kind == JV_KIND_TRUE: python_value = True + elif kind == JV_KIND_NUMBER: number_value = jv_number_value(value) if number_value == INFINITY: @@ -139,14 +144,17 @@ cdef object _jv_to_python(jv value): python_value = int(number_value) else: python_value = number_value + elif kind == JV_KIND_STRING: python_value = jv_string_to_py_string(value) + elif kind == JV_KIND_ARRAY: python_value = [] length = jv_array_length(jv_copy(value)) for idx in range(0, length): property_value = jv_array_get(jv_copy(value), idx) python_value.append(_jv_to_python(property_value)) + elif kind == JV_KIND_OBJECT: python_value = {} idx = jv_object_iter(value) @@ -159,10 +167,12 @@ cdef object _jv_to_python(jv value): python_value[python_property_key] = _jv_to_python(property_value) idx = jv_object_iter_next(value, idx) + else: - jv_free(value) - raise ValueError("Invalid value kind: " + str(kind)) + python_value = None + jv_free(value) + return python_value -- cgit v1.2.3