1 Star 1 Fork 0

LineOfSight / resob

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
resob_jsondt_putjson_parser.go 5.73 KB
一键复制 编辑 原始数据 按行查看 历史
LineOfSight 提交于 2024-01-11 02:45 . resob_json
// Copyright 2023 @Author:LiuBin(LineOfSight) 1440383523@qq.com. All rights reserved.
// Licensed under the MulanPSL-2.0 License.
package resob
import (
"strings"
)
// FindSetJsonNormalGrammaError detect normal gramma errors for a settempalte-json
// tml := "{\"set\":{\"key\":123456,\"putjsontest0\":{\"aaa\":\"!\",\"aaab\":true,\"arrarrstrct\":{\"nnn\":1,\"ccc\":[[\"sdf\tsdfs\\dfe29asdf\",\"nmbndfvdfgfdg\"],[\"sdf\tsdfs\\dfe29asdf\",\"poiuiyyttt\"]]},\"ddd\":\"\",\"fff\":false,\"comboolarr\":[{\"boolarr0\":[true,false]},{\"boolarr1\":[true,false]}]}}}"
func (jr *JsonParser) FindSetJsonNormalGrammaError(tn string) (int, int, string, error) {
if strings.Compare(strings.ToLower(jr.jts[1].jttstr), JSONDTSETOPS) != 0 {
return 1, jr.jts[1].jtt, jr.jts[1].jttstr, ErrGramma
}
return jr.findPutJsonNormalGrammaError(tn)
}
// FindPutJsonNormalGrammaError detect normal gramma errors for a put-json
// a put-json has a fixed format, as follows:
// a put-json without a key, sys will generate a key:
// "{\"put\":{\"putjsontest\":{\"aaa\":\"sdf\tsdfs\\dfe29asdf\",\"aaab\":true,\"arrarrstrct\":{\"nnn\":-1234567890,\"ccc\":[[\"sdf\tsdfs\\dfe29asdf\",\"nmbndfvdfgfdg\"],[\"sdf\tsdfs\\dfe29asdf\",\"poiuiyyttt\"]]},\"ddd\":\"sdf\tsdfs\\dfe29asdf\",\"fff\":false,\"comboolarr\":[{\"boolarr0\":[true,false]},{\"boolarr1\":[true,false]}]}}}"
// a put-json with a key:
// "{\"put\":{\"key\":\"123456\",\"putjsontest\":{\"aaa\":\"sdf\tsdfs\\dfe29asdf\",\"aaab\":true,\"arrarrstrct\":{\"nnn\":-1234567890,\"ccc\":[[\"sdf\tsdfs\\dfe29asdf\",\"nmbndfvdfgfdg\"],[\"sdf\tsdfs\\dfe29asdf\",\"poiuiyyttt\"]]},\"ddd\":\"sdf\tsdfs\\dfe29asdf\",\"fff\":false,\"comboolarr\":[{\"boolarr0\":[true,false]},{\"boolarr1\":[true,false]}]}}}"
// a put-json for bat putting:
// "{\"put\":[{\"key\":\"123456\",\"putjsontest\":{\"aaa\":\"sdf\tsdfs\\dfe29asdf\",\"aaab\":true,\"arrarrstrct\":{\"nnn\":-1234567890,\"ccc\":[[\"sdf\tsdfs\\dfe29asdf\",\"nmbndfvdfgfdg\"],[\"sdf\tsdfs\\dfe29asdf\",\"poiuiyyttt\"]]},\"ddd\":\"sdf\tsdfs\\dfe29asdf\",\"fff\":false,\"comboolarr\":[{\"boolarr0\":[true,false]},{\"boolarr1\":[true,false]}]}},{\"key\":\"1234560\",\"putjsontest\":{\"aaa\":\"sdf\tsdfs\\dfe29asdf\",\"aaab\":true,\"arrarrstrct\":{\"nnn\":-1234567890,\"ccc\":[[\"sdf\tsdfs\\dfe29asdf\",\"nmbndfvdfgfdg\"],[\"sdf\tsdfs\\dfe29asdf\",\"poiuiyyttt\"]]},\"ddd\":\"sdf\tsdfs\\dfe29asdf\",\"fff\":false,\"comboolarr\":[{\"boolarr0\":[true,false]},{\"boolarr1\":[true,false]}]}}]}"
func (jr *JsonParser) FindPutJsonNormalGrammaError(tn string) (int, int, string, error) {
if strings.Compare(strings.ToLower(jr.jts[1].jttstr), JSONDTPUTOPS) != 0 {
return 1, jr.jts[1].jtt, jr.jts[1].jttstr, ErrGramma
}
return jr.findPutJsonNormalGrammaError(tn)
}
func (jr *JsonParser) GetPutOrUpdOrDelJsonTn() string {
switch jr.jts[3].jtt {
// the difference between the items of arr-style put-json,must depend CheckArrTypeRoute
case JsonArrStart:
_bkey := strings.Compare(strings.ToLower(jr.jts[5].jttstr), JSONDTKEY) != 0
if _bkey {
return jr.jts[5].jttstr
} else if !_bkey {
return jr.jts[9].jttstr
}
case JsonObjStart:
_bkey := strings.Compare(strings.ToLower(jr.jts[4].jttstr), JSONDTKEY) != 0
if _bkey {
return jr.jts[4].jttstr
} else if !_bkey {
return jr.jts[8].jttstr
}
}
return ""
}
func (jr *JsonParser) findPutJsonNormalGrammaError(tn string) (int, int, string, error) {
switch jr.jts[3].jtt {
// the difference between the items of arr-style put-json,must depend CheckArrTypeRoute
case JsonArrStart:
_bkey := strings.Compare(strings.ToLower(jr.jts[5].jttstr), JSONDTKEY) != 0
if _bkey {
if tn != "" && strings.Compare(jr.jts[5].jttstr, tn) != 0 {
return 5, jr.jts[5].jtt, jr.jts[5].jttstr, ErrGramma
}
if jr.jts[7].jtt != JsonObjStart {
return 7, jr.jts[7].jtt, jr.jts[7].jttstr, ErrGramma
}
} else if !_bkey {
if tn != "" && strings.Compare(jr.jts[9].jttstr, tn) != 0 {
return 9, jr.jts[9].jtt, jr.jts[9].jttstr, ErrGramma
}
if jr.jts[11].jtt != JsonObjStart {
return 11, jr.jts[11].jtt, jr.jts[11].jttstr, ErrGramma
}
}
// EOF hold 1 pos
if jr.jts[len(jr.jts)-5].jtt != JsonObjEnd {
return len(jr.jts) - 5, jr.jts[len(jr.jts)-5].jtt, jr.jts[len(jr.jts)-5].jttstr, ErrGramma
} else {
n := 1
i := 12
if _bkey {
i = 8
}
for ; i <= len(jr.jts)-5; i++ {
if jr.jts[i].jtt == JsonObjStart {
n++
} else if jr.jts[i].jtt == JsonObjEnd {
n--
}
if n == 0 && i == len(jr.jts)-5 {
break
}
}
if i != len(jr.jts)-5 {
return i, jr.jts[i].jtt, jr.jts[i].jttstr, ErrGramma
}
}
case JsonObjStart:
_bkey := strings.Compare(strings.ToLower(jr.jts[4].jttstr), JSONDTKEY) != 0
if _bkey {
if tn != "" && strings.Compare(jr.jts[4].jttstr, tn) != 0 {
return 4, jr.jts[4].jtt, jr.jts[4].jttstr, ErrGramma
}
if jr.jts[6].jtt != JsonObjStart {
return 6, jr.jts[6].jtt, jr.jts[6].jttstr, ErrGramma
}
} else if !_bkey {
if tn != "" && strings.Compare(jr.jts[8].jttstr, tn) != 0 {
return 8, jr.jts[8].jtt, jr.jts[8].jttstr, ErrGramma
}
if jr.jts[10].jtt != JsonObjStart {
return 10, jr.jts[10].jtt, jr.jts[10].jttstr, ErrGramma
}
}
// EOF hold 1 pos
if jr.jts[len(jr.jts)-4].jtt != JsonObjEnd {
return len(jr.jts) - 4, jr.jts[len(jr.jts)-4].jtt, jr.jts[len(jr.jts)-4].jttstr, ErrGramma
} else {
n := 1
i := 11
if _bkey {
i = 7
}
for ; i <= len(jr.jts)-4; i++ {
if jr.jts[i].jtt == JsonObjStart {
n++
} else if jr.jts[i].jtt == JsonObjEnd {
n--
}
if n == 0 {
break
}
}
if i != len(jr.jts)-4 {
return i, jr.jts[i].jtt, jr.jts[i].jttstr, ErrGramma
}
}
}
return jr.jts[3].jtt, -1, "", nil
}
Go
1
https://gitee.com/lineofsight/resob.git
git@gitee.com:lineofsight/resob.git
lineofsight
resob
resob
5b7b5e40e6d1

搜索帮助