diff --git a/vlib/json/tests/json_decode_test.v b/vlib/json/tests/json_decode_test.v index 38941ea6c9fc77..06662e3baab287 100644 --- a/vlib/json/tests/json_decode_test.v +++ b/vlib/json/tests/json_decode_test.v @@ -90,7 +90,7 @@ struct DbConfig { fn test_decode_error_message_should_have_enough_context_empty() { json.decode(DbConfig, '') or { - assert err.msg().len < 2 + assert err.msg() == 'failed to decode JSON string' return } assert false @@ -98,7 +98,7 @@ fn test_decode_error_message_should_have_enough_context_empty() { fn test_decode_error_message_should_have_enough_context_just_brace() { json.decode(DbConfig, '{') or { - assert err.msg() == '{' + assert err.msg() == 'failed to decode JSON string: {' return } assert false @@ -111,7 +111,7 @@ fn test_decode_error_message_should_have_enough_context_trailing_comma_at_end() "user": "alex", }' json.decode(DbConfig, txt) or { - assert err.msg() == ' "user": "alex",\n}' + assert err.msg().contains(' "user": "alex",\n}') return } assert false @@ -120,7 +120,7 @@ fn test_decode_error_message_should_have_enough_context_trailing_comma_at_end() fn test_decode_error_message_should_have_enough_context_in_the_middle() { txt := '{"host": "localhost", "dbname": "alex" "user": "alex", "port": "1234"}' json.decode(DbConfig, txt) or { - assert err.msg() == 'ost", "dbname": "alex" "user":' + assert err.msg().contains('ost", "dbname": "alex" "user":') return } assert false diff --git a/vlib/v/gen/c/json.v b/vlib/v/gen/c/json.v index 8006a935ecfade..b142b706d04de6 100644 --- a/vlib/v/gen/c/json.v +++ b/vlib/v/gen/c/json.v @@ -95,11 +95,11 @@ ${dec_fn_dec} { ${init_styp}; if (!root) { const char *error_ptr = cJSON_GetErrorPtr(); - if (error_ptr != NULL) { + if (error_ptr != NULL) { const int error_pos = (int)cJSON_GetErrorPos(); int maxcontext_chars = 30; byte *buf = vcalloc_noscan(maxcontext_chars + 10); - if(error_pos > 0) { + if (error_pos > 0) { int backlines = 1; int backchars = error_pos < maxcontext_chars-7 ? (int)error_pos : maxcontext_chars-7 ; char *prevline_ptr = (char*)error_ptr; @@ -119,7 +119,12 @@ ${dec_fn_dec} { int maxchars = vstrlen_char(prevline_ptr); vmemcpy(buf, prevline_ptr, (maxchars < maxcontext_chars ? maxchars : maxcontext_chars)); } - return (${result_name}_${ret_styp}){.is_error = true,.err = _v_error(tos2(buf)),.data = {0}}; + string msg; + msg = _SLIT("failed to decode JSON string"); + if (buf[0] != \'\\0\') { + msg = string__plus(msg, _SLIT(": ")); + } + return (${result_name}_${ret_styp}){.is_error = true,.err = _v_error(string__plus(msg, tos2(buf))),.data = {0}}; } } ')