@@ -18,21 +18,26 @@ type Address struct {
18
18
StreetName string
19
19
City string
20
20
State string
21
+ GateCode int
21
22
}
22
23
23
24
val := jsonast.Parse (` {
24
25
"street_num":1,
25
26
"street_name": "Microsoft Way",
26
27
"city": "Redmond",
27
- "state": "WA"
28
+ "state": "WA",
29
+ "other_info": {
30
+ "needs_signature": false,
31
+ "gate_codes": ["abcd", "efgh"]
32
+ }
28
33
}` )
29
34
30
35
walked := val.
31
36
Walk ().
32
37
Field (" street_num" ).
33
- And () .Field (" street_name" )
34
- And () .Field (" city" ).
35
- And () .Field (" state" ).Validate (func (v Value ) bool {
38
+ .Field (" street_name" )
39
+ .Field (" city" ).
40
+ .Field (" state" ).Validate (func (v Value ) bool {
36
41
str , ok := v.(jsonast.String )
37
42
if !ok {
38
43
return false
@@ -43,20 +48,28 @@ walked := val.
43
48
str.String () == " WA" ||
44
49
str.String () == " OR" ||
45
50
str.String () == " CA"
46
- })
51
+ }).
52
+ Path (
53
+ jsonast.NewStringPathElt (" other_info" ),
54
+ jsonast.NewStringPathElt (" gate_codes" ),
55
+ jsonast.NewIntPathElt (0 ),
56
+ )
47
57
48
58
if transformer.Err () != nil {
49
59
log.Fatal (transformer.Err ())
50
60
}
51
61
52
- // transformer now has 3 jsonast.String fields in its Strings property
53
- // and 1 jsonast.Number field in its Numbers property.
62
+ // walked now has the following fields in the following properties:
54
63
//
55
- // you can now validate on these fields
64
+ // - .Strings has 3 jsonast.String values (street_name, city, state)
65
+ // - .Numbers has 2 jsonast.Number values (street_num, other_info.gate_codes[0])
66
+ //
67
+ // you can now create an Address from these fields
56
68
address := Address {
57
- StreetNum : transformer.Numbers [0 ],
58
- StreetName : transformer.Strings [0 ],
59
- City : transformer.Strings [1 ],
60
- State : transformer.Strings [2 ],
69
+ StreetNum : walked.Numbers [0 ],
70
+ StreetName : walked.Strings [0 ],
71
+ City : walked.Strings [1 ],
72
+ State : walked.Strings [2 ],
73
+ GateCode : walked.Numbers [1 ],
61
74
}
62
75
```
0 commit comments