aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/encoding/json/marshal.odin5
-rw-r--r--tests/core/encoding/json/test_core_json.odin21
2 files changed, 26 insertions, 0 deletions
diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin
index 0464c24d1..30426f911 100644
--- a/core/encoding/json/marshal.odin
+++ b/core/encoding/json/marshal.odin
@@ -410,6 +410,11 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
omitempty := false
json_name, extra := json_name_from_tag_value(reflect.struct_tag_get(reflect.Struct_Tag(info.tags[i]), "json"))
+
+ if json_name == "-" {
+ continue
+ }
+
for flag in strings.split_iterator(&extra, ",") {
switch flag {
case "omitempty":
diff --git a/tests/core/encoding/json/test_core_json.odin b/tests/core/encoding/json/test_core_json.odin
index 92c050952..a50dd7fe0 100644
--- a/tests/core/encoding/json/test_core_json.odin
+++ b/tests/core/encoding/json/test_core_json.odin
@@ -368,4 +368,25 @@ utf8_string_of_multibyte_characters :: proc(t: ^testing.T) {
val, err := json.parse_string(`"🐛✅"`)
defer json.destroy_value(val)
testing.expectf(t, err == nil, "Expected `json.parse` to return nil, got %v", err)
+}
+
+@test
+struct_with_ignore_tags :: proc(t: ^testing.T) {
+ My_Struct :: struct {
+ a: string `json:"-"`,
+ }
+
+ my_struct := My_Struct{
+ a = "test",
+ }
+
+ my_struct_marshaled, marshal_err := json.marshal(my_struct)
+ defer delete(my_struct_marshaled)
+
+ testing.expectf(t, marshal_err == nil, "Expected `json.marshal` to return nil error, got %v", marshal_err)
+
+ my_struct_json := transmute(string)my_struct_marshaled
+ expected_json := `{}`
+
+ testing.expectf(t, expected_json == my_struct_json, "Expected `json.marshal` to return %s, got %s", expected_json, my_struct_json)
} \ No newline at end of file