fix: extract data using jmespath

Change-Id: Icea3b8fa7e71dd610c19c91e21a259104ab2fe30
This commit is contained in:
buyuxiang
2022-02-20 13:43:28 +08:00
parent 6bb96e8eac
commit 54402ad5f7
5 changed files with 63 additions and 4 deletions

View File

@@ -1,6 +1,7 @@
package hrp
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
@@ -53,7 +54,9 @@ func newResponseObject(t *testing.T, parser *parser, resp *http.Response) (*resp
// convert respObjMeta to interface{}
respObjMetaBytes, _ := json.Marshal(respObjMeta)
var data interface{}
if err := json.Unmarshal(respObjMetaBytes, &data); err != nil {
decoder := json.NewDecoder(bytes.NewReader(respObjMetaBytes))
decoder.UseNumber()
if err := decoder.Decode(&data); err != nil {
log.Error().
Str("respObjMeta", string(respObjMetaBytes)).
Err(err).
@@ -167,5 +170,12 @@ func (v *responseObject) searchJmespath(expr string) interface{} {
log.Error().Str("expr", expr).Err(err).Msg("search jmespath failed")
return expr // jmespath not found, return the expression
}
if number, ok := checkValue.(json.Number); ok {
checkNumber, err := parseJSONNumber(number)
if err != nil {
log.Error().Interface("json number", number).Err(err).Msg("convert json number failed")
}
return checkNumber
}
return checkValue
}