Skip to content

Commit

Permalink
使用gjson替换simplejson
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinDai committed Mar 19, 2024
1 parent 21642d4 commit 1aa741f
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 64 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
## 第三方依赖

- [gin](https://github.com/gin-gonic/gin)
- [simplejson](https://github.com/bitly/go-simplejson)
- [gjson](https://github.com/tidwall/gjson)
- [yaml](https://gopkg.in/yaml.v3)
- [openaigo](https://github.com/otiai10/openaigo)

Expand Down
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,13 @@ module weChatRobot-go
go 1.21

require (
github.com/bitly/go-simplejson v0.5.0
github.com/gin-gonic/gin v1.9.1
github.com/otiai10/openaigo v1.1.0
github.com/tidwall/gjson v1.17.1
gopkg.in/yaml.v3 v3.0.1
)

require (
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
Expand All @@ -21,12 +20,13 @@ require (
github.com/goccy/go-json v0.10.2 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/kr/pretty v0.2.1 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.8 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.1 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/arch v0.3.0 // indirect
Expand Down
16 changes: 7 additions & 9 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
Expand Down Expand Up @@ -36,11 +32,6 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
Expand Down Expand Up @@ -69,6 +60,13 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U=
github.com/tidwall/gjson v1.17.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
Expand Down
27 changes: 13 additions & 14 deletions pkg/service/keyword_service.go
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
package service

import (
"github.com/bitly/go-simplejson"
"github.com/tidwall/gjson"
"weChatRobot-go/pkg/logger"
)

var keywordMessageMap = make(map[string]*simplejson.Json)
var keywordResultMap gjson.Result

func InitKeywordMap(keywordBytes []byte) {
var keywordJson *simplejson.Json
var err error
if keywordJson, err = simplejson.NewJson(keywordBytes); err != nil {
logger.Error(err, "解析关键字JSON文件报错")
if !gjson.ValidBytes(keywordBytes) {
logger.Warn("关键字JSON文件格式不正确,跳过解析")
return
}

var keywordMap map[string]interface{}
if keywordMap, err = keywordJson.Map(); err != nil {
logger.Error(err, "转换关键字JSON为Map报错")
return
}
result := gjson.ParseBytes(keywordBytes)
keywordResultMap = result

for k, v := range keywordMap {
logger.Info("初始化关键字map", k, v)
keywordMessageMap[k] = keywordJson.Get(k)
for k, v := range keywordResultMap.Map() {
logger.Info("初始化关键字map", k, v.Value())
}
}

func GetResultByKeyword(keyword string) gjson.Result {
result := keywordResultMap.Get(keyword)
return result
}
37 changes: 17 additions & 20 deletions pkg/service/wechat_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,37 +90,34 @@ func getRespMessageByEvent(fromUserName, toUserName, event string) interface{} {
}

func getRespMessageByKeyword(fromUserName, toUserName, keyword string) interface{} {
v, ok := keywordMessageMap[keyword]
if ok {
var msgType string
var err error
if msgType, err = v.Get("type").String(); err != nil {
v := GetResultByKeyword(keyword)
if v.Exists() {
msgType := v.Get("type").String()
if msgType == "" {
return nil
}

if msgType == model.MsgTypeText {
content, _ := v.Get("Content").String()
content := v.Get("Content").String()
return util.BuildRespTextMessage(fromUserName, toUserName, content)
} else if msgType == model.MsgTypeNews {
var articleArray []interface{}
if articleArray, err = v.Get("Articles").Array(); err != nil {
articleArray := v.Get("Articles").Array()
var articleLength = len(articleArray)
if articleLength == 0 {
return nil
}

var articleLength = len(articleArray)
var articles = make([]model.ArticleItem, articleLength)
for i, articleJson := range articleArray {
if eachArticle, ok := articleJson.(map[string]interface{}); ok {
var article model.Article
article.Title = eachArticle["Title"].(string)
article.Description = eachArticle["Description"].(string)
article.PicUrl = eachArticle["PicUrl"].(string)
article.Url = eachArticle["Url"].(string)

var articleItem model.ArticleItem
articleItem.Article = article
articles[i] = articleItem
}
var article model.Article
article.Title = articleJson.Get("Title").String()
article.Description = articleJson.Get("Description").String()
article.PicUrl = articleJson.Get("PicUrl").String()
article.Url = articleJson.Get("Url").String()

var articleItem model.ArticleItem
articleItem.Article = article
articles[i] = articleItem
}
return util.BuildRespNewsMessage(fromUserName, toUserName, articles)
}
Expand Down
32 changes: 15 additions & 17 deletions pkg/third-party/tuling/tuling.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"github.com/bitly/go-simplejson"
"github.com/tidwall/gjson"
"io"
"net/http"
"sync/atomic"
Expand Down Expand Up @@ -55,21 +55,22 @@ func (t *Tuling) GetRespMessage(fromUserName, toUserName, content string) interf
return nil
}

var result []byte
if result, err = io.ReadAll(resp.Body); err != nil {
var respBytes []byte
if respBytes, err = io.ReadAll(resp.Body); err != nil {
logger.Error(err, "读取图灵机器人响应内容报错")
return nil
}

var resultJson *simplejson.Json
if resultJson, err = simplejson.NewJson(result); err != nil {
logger.Error(err, "解析图灵机器人响应JSON报错")
respStr := string(respBytes)
logger.Info("收到图灵机器人响应内容", "respStr", respStr)

if !gjson.Valid(respStr) {
logger.Warn("图灵机器人响应内容不是json格式,无法解析")
return nil
}

logger.Info("收到图灵机器人响应内容", "resultJson", resultJson)

code, _ := resultJson.Get("intent").Get("code").Int()
respJson := gjson.Parse(respStr)
code := respJson.Get("intent.code").Int()
switch code {
case model.ParamErrCode:
return util.BuildRespTextMessage(fromUserName, toUserName, "我不是很理解你说的话")
Expand All @@ -79,15 +80,12 @@ func (t *Tuling) GetRespMessage(fromUserName, toUserName, content string) interf
return util.BuildRespTextMessage(fromUserName, toUserName, "我今天已经说了太多话了,有点累,明天再来找我聊天吧!")
case model.SuccessCode:
var respTextMessage interface{}
resultArray, _ := resultJson.Get("results").Array()
resultArray := respJson.Get("results").Array()
for _, result := range resultArray {
//转换成map结构
if resultMap, ok := result.(map[string]interface{}); ok {
if resultMap["resultType"].(string) == model.TextResultType {
valueMap := resultMap["values"].(map[string]interface{})
respTextMessage = util.BuildRespTextMessage(fromUserName, toUserName, valueMap["text"].(string))
break
}
if result.Get("resultType").String() == model.TextResultType {
valueMap := result.Get("values")
respTextMessage = util.BuildRespTextMessage(fromUserName, toUserName, valueMap.Get("text").String())
break
}
}
if respTextMessage != nil {
Expand Down

0 comments on commit 1aa741f

Please sign in to comment.