diff --git a/core/json/mod.rs b/core/json/mod.rs index a3b6c5d71..3690b2a5e 100644 --- a/core/json/mod.rs +++ b/core/json/mod.rs @@ -656,18 +656,16 @@ pub fn json_object(values: &[OwnedValue]) -> crate::Result { Ok(OwnedValue::Text(Text::json(result))) } -pub fn is_json_valid(json_value: &OwnedValue) -> crate::Result { - match json_value { - OwnedValue::Text(ref t) => match from_str::(t.as_str()) { - Ok(_) => Ok(OwnedValue::Integer(1)), - Err(_) => Ok(OwnedValue::Integer(0)), - }, - OwnedValue::Blob(_) => { - bail_parse_error!("Unsuported!") - } - OwnedValue::Null => Ok(OwnedValue::Null), - _ => Ok(OwnedValue::Integer(1)), +pub fn is_json_valid(json_value: &OwnedValue) -> OwnedValue { + if matches!(json_value, OwnedValue::Null) { + return OwnedValue::Null; } + let json_is_ok = convert_dbtype_to_jsonb(json_value) + .and_then(|_| { + return Ok(OwnedValue::Integer(1)); + }) + .unwrap_or(OwnedValue::Integer(0)); + json_is_ok } pub fn json_quote(value: &OwnedValue) -> crate::Result { diff --git a/core/vdbe/mod.rs b/core/vdbe/mod.rs index 7621146d6..72eb20645 100644 --- a/core/vdbe/mod.rs +++ b/core/vdbe/mod.rs @@ -2216,7 +2216,7 @@ impl Program { } JsonFunc::JsonValid => { let json_value = &state.registers[*start_reg]; - state.registers[*dest] = is_json_valid(json_value)?; + state.registers[*dest] = is_json_valid(json_value); } JsonFunc::JsonPatch => { assert_eq!(arg_count, 2);