MQTT中查询这样的非标准的json返回数据给golang解析带来了很大困扰,请问下怎么处理?[阿里云消息队列MQ]

MQTT中查询rocketmq的admin api,ExamineConsumeStats

rocketmq返回的内容:

{"consumeTps":0.0,"offsetTable":{{"brokerName":"broker-a","queueId":7,"topic":"evidence-sync-cloud"}:{"brokerOffset":0,"consumerOffset":0,"lastTimestamp":0}}}

可以看到在offsetTable里面的数据并不是标准的json。

查看了rocketmq的源码,发现定义的是一个以MessageQueue为key的HashMap:

private HashMap offsetTable = new HashMap();

这样的非标准的json返回数据给golang解析带来了很大困扰,请问下怎么处理这样的数据,ExamineConsumeStats这个API返回的数据的问题,求救大家如何解决的

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
1 条回复 A 作者 M 管理员
  1. 可以考虑使用golang中的json.RawMessage类型来暂时保存这个非标准的JSON数据,在需要使用时再进行具体的解析操作。

    步骤如下:

    定义结构体来表示ExamineConsumeStats的返回数据: type ConsumeStats struct { ConsumeTps float64 OffsetTable map[string]json.RawMessage } 在解析ExamineConsumeStats的返回数据时,使用json.RawMessage类型来保存offsetTable字段的值: consumeStats := ConsumeStats{} err := json.Unmarshal(response, &consumeStats) 在需要使用offsetTable字段时,进行具体的解析操作: for key, value := range consumeStats.OffsetTable { offsetWrapper := OffsetWrapper{} err := json.Unmarshal([]byte(value), &offsetWrapper) // Do something with the offsetWrapper object } 使用这种方法,可以方便地暂时保存非标准的JSON数据,并在需要使用时进行具体的解析操作。

  2. 阿里云MQ的RocketMQ的Admin API返回的数据确实不是标准的JSON格式,而是一种类似于Map的数据结构。如果您使用Golang进行解析,可以使用Golang的map类型来处理该数据。

    具体步骤如下:

    1. 使用Golang的HTTP库发送ExamineConsumeStats请求,并获取返回的结果。

    2. 将返回的结果转换成map类型。可以使用Golang的json库中的Unmarshal函数,将返回结果转换成byte数组,再使用Golang的map类型进行解析。示例代码如下:

    import (    "encoding/json"    "fmt")func main() {    // 假设返回的结果为resultStr    resultStr := `{"consumeTps":0.0,"offsetTable":{{"brokerName":"broker-a","queueId":7,"topic":"evidence-sync-cloud"}:{"brokerOffset":0,"consumerOffset":0,"lastTimestamp":0}}}`    // 将结果转换成byte数组    resultBytes := []byte(resultStr)    // 定义一个空的map类型    resultMap := make(map[string]interface{})    // 解析byte数组    err := json.Unmarshal(resultBytes, &resultMap)    if err != nil {        fmt.Println("解析结果失败:", err)        return    }    // 打印解析结果    fmt.Println("解析结果:", resultMap)}

    由于该数据结构比较复杂,因此在解析时需要进行多层嵌套,具体解析方式需要根据实际情况进行调整。