@@ -70,12 +70,14 @@ func CreatePatch(a, b []byte) ([]Operation, error) {
7070 }
7171 var aI interface {}
7272 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 {
7576 return nil , errBadJSONDoc
7677 }
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 {
7981 return nil , errBadJSONDoc
8082 }
8183 return handleValues (aI , bI , "" , []Operation {})
@@ -94,6 +96,11 @@ func matchesValue(av, bv interface{}) bool {
9496 if ok && bt == at {
9597 return true
9698 }
99+ case json.Number :
100+ bt , ok := bv .(json.Number )
101+ if ok && bt == at {
102+ return true
103+ }
97104 case float64 :
98105 bt , ok := bv .(float64 )
99106 if ok && bt == at {
@@ -212,7 +219,7 @@ func handleValues(av, bv interface{}, p string, patch []Operation) ([]Operation,
212219 if err != nil {
213220 return nil , err
214221 }
215- case string , float64 , bool :
222+ case string , float64 , bool , json. Number :
216223 if ! matchesValue (av , bv ) {
217224 patch = append (patch , NewOperation ("replace" , p , bv ))
218225 }
0 commit comments