修复关键字判断BUG
This commit is contained in:
54
lexical.go
54
lexical.go
@ -8,8 +8,6 @@
|
|||||||
package filter
|
package filter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
|
|
||||||
"git.zhangdeman.cn/zhangdeman/util"
|
"git.zhangdeman.cn/zhangdeman/util"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@ -70,14 +68,15 @@ func (l *lexical) Parse(jsonData string) ([]*lexicalNode, error) {
|
|||||||
tmpStr = ""
|
tmpStr = ""
|
||||||
} else {
|
} else {
|
||||||
// 不是关键词, 继续向后走
|
// 不是关键词, 继续向后走
|
||||||
if currentChar == " " {
|
if currentChar == " " && l.keyLeftRightTokenCnt%2 == 0 {
|
||||||
// 当前字符是空格, 只有在字符串内方才有效
|
// 当前字符是空格, 只有在 "" 之间方才有效 , 关键字之间的空格, 忽略即可
|
||||||
if l.keyLeftRightTokenCnt%2 == 0 {
|
continue
|
||||||
// 关键字之间的空格, 忽略即可
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
tmpStr = tmpStr + currentChar
|
tmpStr = tmpStr + currentChar
|
||||||
|
if (tmpStr == "\n" || tmpStr == "\t") && l.keyLeftRightTokenCnt%2 == 0 {
|
||||||
|
// 不在 "" 之间的 \n \t 无意义, 过滤掉
|
||||||
|
tmpStr = ""
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(tmpStr) > 0 {
|
if len(tmpStr) > 0 {
|
||||||
@ -87,28 +86,7 @@ func (l *lexical) Parse(jsonData string) ([]*lexicalNode, error) {
|
|||||||
})
|
})
|
||||||
tmpStr = ""
|
tmpStr = ""
|
||||||
}
|
}
|
||||||
// 格式化, 去掉 \n \t 等换行符
|
|
||||||
format := make([]*lexicalNode, 0)
|
|
||||||
for idx, val := range l.lexicalResult {
|
|
||||||
formatVal := strings.ReplaceAll(strings.ReplaceAll(val.Val, "\n", ""), "\t", "")
|
|
||||||
// 说明是 \n\t 组成的
|
|
||||||
if len(formatVal) == 0 {
|
|
||||||
if idx == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if idx == len(l.lexicalResult)-1 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if (!l.lexicalResult[idx-1].IsToken || l.lexicalResult[idx-1].Val != keyLeftRightToken) ||
|
|
||||||
(!l.lexicalResult[idx+1].IsToken || l.lexicalResult[idx+1].Val != keyLeftRightToken) {
|
|
||||||
// 不是 "" 之间的 \n \t 没有实际意义
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
format = append(format, val)
|
|
||||||
}
|
|
||||||
l.lexicalResult = format
|
|
||||||
// util.JSON.ConsoleOutput(l.lexicalResult)
|
|
||||||
return l.lexicalResult, nil
|
return l.lexicalResult, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +115,7 @@ func (l *lexical) inputCharIsToken(inputChar string, tmpStr string) bool {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
// 0 个 或者 偶数个转义符, " 是关键字
|
// 0 个 或者 偶数个转义符, " 是关键字
|
||||||
if escapeCharacterTokenCnt%2 == 0 && inputChar == keyLeftRightToken {
|
if inputChar == keyLeftRightToken && escapeCharacterTokenCnt%2 == 0 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,15 +137,15 @@ func (l *lexical) inputCharIsToken(inputChar string, tmpStr string) bool {
|
|||||||
// [[],[]]
|
// [[],[]]
|
||||||
// [1,2,3]
|
// [1,2,3]
|
||||||
// [true,false,true]
|
// [true,false,true]
|
||||||
if inputChar == commaToken && len(tmpStr) == 0 &&
|
if inputChar == commaToken && len(tmpStr) == 0 && (
|
||||||
// 对应 {"name":"zhangsan", "age":"18"}
|
// 对应 {"name":"zhangsan", "age":"18"}
|
||||||
(nil != preNode && preNode.Val == keyLeftRightToken) ||
|
(nil != preNode && preNode.Val == keyLeftRightToken) ||
|
||||||
// 对应[{"name":"zhangsan", "age":"18"}, {"name":"zhangsan", "age":"18"}]
|
// 对应[{"name":"zhangsan", "age":"18"}, {"name":"zhangsan", "age":"18"}]
|
||||||
(nil != preNode && preNode.Val == objectRightToken) ||
|
(nil != preNode && preNode.Val == objectRightToken) ||
|
||||||
// 对应[[],[]]
|
// 对应[[],[]]
|
||||||
(nil != preNode && preNode.Val == listRightToken) ||
|
(nil != preNode && preNode.Val == listRightToken) ||
|
||||||
// 对应 [true,false,true] / [1,2,3] / [1,true,2,false]
|
// 对应 [true,false,true] / [1,2,3] / [1,true,2,false]
|
||||||
(nil != preNode && (preNode.Val == listLeftToken || preNode.Val == commaToken) && (tmpStrType == "number" || tmpStr == "bool")) { // 对应
|
(nil != preNode && (preNode.Val == listLeftToken || preNode.Val == commaToken) && (tmpStrType == "number" || tmpStr == "bool"))) { // 对应
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +190,7 @@ func (l *lexical) inputCharIsToken(inputChar string, tmpStr string) bool {
|
|||||||
// []
|
// []
|
||||||
// [[],[]]
|
// [[],[]]
|
||||||
// "a": []
|
// "a": []
|
||||||
if inputChar == listLeftToken && (nil == preNode || // 对应 []
|
if inputChar == listLeftToken && len(tmpStr) == 0 && (nil == preNode || // 对应 []
|
||||||
(nil != preNode && preNode.Val == listLeftToken) || // 对应 [[],[]]
|
(nil != preNode && preNode.Val == listLeftToken) || // 对应 [[],[]]
|
||||||
(nil != preNode && preNode.Val == colonToken)) { // 对应 "a": []
|
(nil != preNode && preNode.Val == colonToken)) { // 对应 "a": []
|
||||||
// [ 是关键字
|
// [ 是关键字
|
||||||
@ -226,7 +204,7 @@ func (l *lexical) inputCharIsToken(inputChar string, tmpStr string) bool {
|
|||||||
// [1,2,3]
|
// [1,2,3]
|
||||||
// [true, false]
|
// [true, false]
|
||||||
// ["", "" ]
|
// ["", "" ]
|
||||||
if inputChar == listLeftToken && (
|
if inputChar == listRightToken && len(tmpStr) == 0 && (
|
||||||
//对应 []
|
//对应 []
|
||||||
(nil != preNode && preNode.Val == listLeftToken) ||
|
(nil != preNode && preNode.Val == listLeftToken) ||
|
||||||
// 对应 [[],[]]
|
// 对应 [[],[]]
|
||||||
@ -237,7 +215,7 @@ func (l *lexical) inputCharIsToken(inputChar string, tmpStr string) bool {
|
|||||||
(nil != preNode && (tmpStrType == "number" || tmpStrType == "bool")) ||
|
(nil != preNode && (tmpStrType == "number" || tmpStrType == "bool")) ||
|
||||||
// 对应 ["", "" ]
|
// 对应 ["", "" ]
|
||||||
(nil != preNode && preNode.Val == keyLeftRightToken)) {
|
(nil != preNode && preNode.Val == keyLeftRightToken)) {
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user