@@ -70,12 +70,14 @@ func CreatePatch(a, b []byte) ([]Operation, error) {
70
70
}
71
71
var aI interface {}
72
72
var bI interface {}
73
- err := json .Unmarshal (a , & aI )
74
- if err != nil {
73
+ aDec := json .NewDecoder (bytes .NewReader (a ))
74
+ aDec .UseNumber ()
75
+ if err := aDec .Decode (& aI ); err != nil {
75
76
return nil , errBadJSONDoc
76
77
}
77
- err = json .Unmarshal (b , & bI )
78
- if err != nil {
78
+ bDec := json .NewDecoder (bytes .NewReader (b ))
79
+ bDec .UseNumber ()
80
+ if err := bDec .Decode (& bI ); err != nil {
79
81
return nil , errBadJSONDoc
80
82
}
81
83
return handleValues (aI , bI , "" , []Operation {})
@@ -94,6 +96,11 @@ func matchesValue(av, bv interface{}) bool {
94
96
if ok && bt == at {
95
97
return true
96
98
}
99
+ case json.Number :
100
+ bt , ok := bv .(json.Number )
101
+ if ok && bt == at {
102
+ return true
103
+ }
97
104
case float64 :
98
105
bt , ok := bv .(float64 )
99
106
if ok && bt == at {
@@ -212,7 +219,7 @@ func handleValues(av, bv interface{}, p string, patch []Operation) ([]Operation,
212
219
if err != nil {
213
220
return nil , err
214
221
}
215
- case string , float64 , bool :
222
+ case string , float64 , bool , json. Number :
216
223
if ! matchesValue (av , bv ) {
217
224
patch = append (patch , NewOperation ("replace" , p , bv ))
218
225
}
0 commit comments