@@ -5,16 +5,20 @@ import (
55 "strings"
66)
77
8- const omitEmptyToken string = "omitempty"
8+ const (
9+ omitEmptyToken string = "omitempty"
10+ omitAlwaysToken string = "-"
11+ )
912
1013type Segment struct {
1114 Name string
1215 List bool
1316}
1417
1518type Path struct {
16- segments []Segment
17- OmitEmpty bool
19+ segments []Segment
20+ OmitEmpty bool
21+ OmitAlways bool
1822}
1923
2024func (p Path ) Len () int {
@@ -44,11 +48,12 @@ func ComputePath(field reflect.StructField) Path {
4448 var segments []Segment
4549 name := field .Name
4650 omitempty := false
51+ omitalways := false
4752
4853 if tag := field .Tag .Get ("json" ); tag != "" {
49- name , omitempty = parseTag (tag , field .Name )
54+ name , omitempty , omitalways = parseTag (tag , field .Name )
5055 } else if tag := field .Tag .Get ("jsonry" ); tag != "" {
51- name , omitempty = parseTag (tag , field .Name )
56+ name , omitempty , omitalways = parseTag (tag , field .Name )
5257 segments = parseSegments (name )
5358 }
5459
@@ -60,12 +65,17 @@ func ComputePath(field reflect.StructField) Path {
6065 }
6166
6267 return Path {
63- OmitEmpty : omitempty ,
64- segments : segments ,
68+ OmitEmpty : omitempty ,
69+ OmitAlways : omitalways ,
70+ segments : segments ,
6571 }
6672}
6773
68- func parseTag (tag , defaultName string ) (name string , omitempty bool ) {
74+ func parseTag (tag , defaultName string ) (name string , omitempty , omitalways bool ) {
75+ if tag == omitAlwaysToken {
76+ return defaultName , false , true
77+ }
78+
6979 parts := strings .Split (tag , "," )
7080
7181 if len (parts ) >= 1 && len (parts [0 ]) > 0 {
0 commit comments