@@ -402,9 +402,14 @@ func jsonPath(query, toMatch string) interface{} {
402
402
403
403
// Jsonpath library converts large int into a string with scientific notion, the following
404
404
// reverts that process to avoid mismatching when using the jsonpath result for csv data lookup
405
- bigInt := new (big.Int )
406
- if _ , ok := bigInt .SetString (result , 10 ); ok {
407
- result = fmt .Sprint (bigInt )
405
+ // Handle large integers in scientific notation by converting back to big.Int
406
+ if isScientific (result ) {
407
+ // If result is in scientific notation, try converting to a big.Int
408
+ bigInt := new (big.Int )
409
+ bigInt , success := bigIntFromString (result )
410
+ if success {
411
+ result = bigInt .String () // Convert back to string representation of the big integer
412
+ }
408
413
}
409
414
410
415
// convert to array data if applicable
@@ -419,6 +424,27 @@ func jsonPath(query, toMatch string) interface{} {
419
424
return arrayData
420
425
}
421
426
427
+ // isScientific checks if a string is in scientific notation (e.g., "1.349599e+37")
428
+ func isScientific (value string ) bool {
429
+ return strings .Contains (value , "e" ) || strings .Contains (value , "E" )
430
+ }
431
+
432
+ // bigIntFromString converts a string representing a number (potentially in scientific notation) to big.Int
433
+ func bigIntFromString (value string ) (* big.Int , bool ) {
434
+ // Parse the string as a big.Float to handle scientific notation
435
+ flt := new (big.Float )
436
+ flt , _ , err := big .ParseFloat (value , 10 , 0 , big .ToNearestEven )
437
+ if err != nil {
438
+ return nil , false
439
+ }
440
+
441
+ // Convert the big.Float to big.Int (rounding down)
442
+ bigInt := new (big.Int )
443
+ flt .Int (bigInt )
444
+
445
+ return bigInt , true
446
+ }
447
+
422
448
func xPath (query , toMatch string ) string {
423
449
result , err := XpathExecution (query , toMatch )
424
450
if err != nil {
0 commit comments