in internal/model.go [393:444]
func parseGsonFormat(body []byte) map[primitive.MessageQueue]int64 {
result := gjson.ParseBytes(body)
rlog.Debug("offset table string "+result.Get("offsetTable").String(), nil)
offsetTable := make(map[primitive.MessageQueue]int64, 0)
offsetStr := result.Get("offsetTable").String()
if len(offsetStr) <= 2 {
rlog.Warning("parse reset offset table json get nothing in body", map[string]interface{}{
"origin json": offsetStr,
})
return offsetTable
}
offsetTableArray := strings.Split(offsetStr, "],[")
for index, v := range offsetTableArray {
kvArray := strings.Split(v, "},")
var kstr, vstr string
if index == len(offsetTableArray)-1 {
vstr = kvArray[1][:len(kvArray[1])-2]
} else {
vstr = kvArray[1]
}
offset, err := strconv.ParseInt(vstr, 10, 64)
if err != nil {
rlog.Error("Unmarshal offset error", map[string]interface{}{
rlog.LogKeyUnderlayError: err,
})
return nil
}
if index == 0 {
kstr = kvArray[0][2:len(kvArray[0])] + "}"
} else {
kstr = kvArray[0] + "}"
}
kObj := new(primitive.MessageQueue)
err = jsoniter.Unmarshal([]byte(kstr), &kObj)
if err != nil {
rlog.Error("Unmarshal message queue error", map[string]interface{}{
rlog.LogKeyUnderlayError: err,
})
return nil
}
offsetTable[*kObj] = offset
}
return offsetTable
}