fix:parse json error in schemaless

This commit is contained in:
wangmm0220 2023-02-06 17:50:58 +08:00
parent ba73ba9359
commit 1401aab1e8
1 changed files with 18 additions and 16 deletions

View File

@ -275,6 +275,7 @@ int smlJsonParseObjFirst(char **start, SSmlLineInfo *element, int8_t *offset){
} }
if(unlikely(isInQuote && *(*start) == '"')){ if(unlikely(isInQuote && *(*start) == '"')){
element->measureLen = (*start) - element->measure; element->measureLen = (*start) - element->measure;
(*start)++;
break; break;
} }
(*start)++; (*start)++;
@ -393,6 +394,7 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
while(*(*start)){ while(*(*start)){
if(unlikely(*(*start) == '"')){ if(unlikely(*(*start) == '"')){
element->measureLen = (*start) - element->measure; element->measureLen = (*start) - element->measure;
(*start)++;
break; break;
} }
(*start)++; (*start)++;
@ -406,15 +408,14 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
element->timestampLen = tmp - (*start); element->timestampLen = tmp - (*start);
*start = tmp; *start = tmp;
} }
continue; }else{
} while(*(*start)){
if(unlikely(*(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){
while(*(*start)){ element->timestampLen = (*start) - element->timestamp;
if(unlikely(*(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){ break;
element->timestampLen = (*start) - element->timestamp; }
break; (*start)++;
} }
(*start)++;
} }
}else if((*start)[1] == 'v'){ }else if((*start)[1] == 'v'){
(*start) += offset[index++]; (*start) += offset[index++];
@ -425,14 +426,14 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
element->colsLen = tmp - (*start); element->colsLen = tmp - (*start);
*start = tmp; *start = tmp;
} }
continue; }else{
} while(*(*start)){
while(*(*start)){ if(unlikely( *(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){
if(unlikely( *(*start) == ',' || *(*start) == '}' || (*(*start)) <= 32)){ element->colsLen = (*start) - element->cols;
element->colsLen = (*start) - element->cols; break;
break; }
(*start)++;
} }
(*start)++;
} }
}else if((*start)[1] == 't' && (*start)[2] == 'a'){ }else if((*start)[1] == 't' && (*start)[2] == 'a'){
(*start) += offset[index++]; (*start) += offset[index++];
@ -442,7 +443,6 @@ int smlJsonParseObj(char **start, SSmlLineInfo *element, int8_t *offset){
element->tagsLen = tmp - (*start); element->tagsLen = tmp - (*start);
*start = tmp; *start = tmp;
} }
continue;
} }
if(*(*start) == '}'){ if(*(*start) == '}'){
(*start)++; (*start)++;
@ -1259,6 +1259,7 @@ int32_t smlParseJSON(SSmlHandle *info, char *payload) {
if(info->dataFormat) { if(info->dataFormat) {
SSmlLineInfo element = {0}; SSmlLineInfo element = {0};
ret = smlParseJSONString(info, &dataPointStart, &element); ret = smlParseJSONString(info, &dataPointStart, &element);
if(element.measure == NULL) break;
}else{ }else{
if(cnt >= payloadNum){ if(cnt >= payloadNum){
payloadNum = payloadNum << 1; payloadNum = payloadNum << 1;
@ -1269,6 +1270,7 @@ int32_t smlParseJSON(SSmlHandle *info, char *payload) {
} }
} }
ret = smlParseJSONString(info, &dataPointStart, info->lines + cnt); ret = smlParseJSONString(info, &dataPointStart, info->lines + cnt);
if((info->lines + cnt)->measure == NULL) break;
} }
if (unlikely(ret != TSDB_CODE_SUCCESS)) { if (unlikely(ret != TSDB_CODE_SUCCESS)) {
uError("SML:0x%" PRIx64 " Invalid JSON Payload 1:%s", info->id, payload); uError("SML:0x%" PRIx64 " Invalid JSON Payload 1:%s", info->id, payload);