Как бороться с ошибкой сохранения json-данных в бэкэнд-коде обнаружения пешеходов?

Архитектура
Как бороться с ошибкой сохранения json-данных в бэкэнд-коде обнаружения пешеходов?

Как вы все знаете, некоторое время назад мы протестировали функцию обнаружения пешеходов в определенном живописном месте, а также связали эту функцию с системой продажи билетов живописного места. Когда мы сравнили результаты анализа пешеходов с данными сценической билетной системы, внутренний код показал ошибку в сохраненных json-данных. Ошибка данных Json: поле первых "Persons" равно 0 (то есть количество людей равно 0), а "ChangeValueArr" не должно иметь значения; а в массиве "ChangeValueArr" много информация об источнике видео, подлежащем замене (количество заменяемых людей) ).

Сначала используйте поиск, чтобы найти поле, добавленное «ChangeValueArr». Следующий код — это код, который база данных ищет совпадения и добавляет к «ChangeValueArr».

value := ChangeTimeValue{
   StartTime: sql.StartTimestamp - DifTime,
   EndTime: sql.EndTimestamp - DifTime,
   StartTimeStr: MsToTimeStr(sql.StartTimestamp),
   EndTimeStr: MsToTimeStr(sql.EndTimestamp),
   Persons: p,
   Filename: "",
   Duration: sql.EndTimestamp - sql.StartTimestamp,
   IsLive: false,
}
if p == 0 || v.Persons == 0 {
   MismatchTimeValueArr[index].IsSuccess = true
   log.Println("票务系统为0人")
} else if p < v.Persons { //作为拼接
   SnapDataArr = append(SnapDataArr, value)
} else if p >= v.Persons && p <= (v.Persons + 100) {//成功找到符合条件
   log.Println("ChangeValueArr = append1")
   MismatchTimeValueArr[index].ChangeValueArr = append(MismatchTimeValueArr[index].ChangeValueArr, value)
}

Следующий код предназначен для поиска файла и добавления его в поле «ChangeValueArr»:

if (hour - 2) >= h && (hour + 2) <= h{ // 符合小时的时间
   value := ChangeTimeValue{
      StartTime: -1,
      EndTime: -1,
      StartTimeStr: "-1",
      EndTimeStr: "-1",
      Persons: p,
      Filename: fmt.Sprintf("%s/%s", currDir, name),
      Duration: s * 1000,
      IsLive: false,
   }
   if p < v.Persons { //作为拼接
      SnapDataArr = append(SnapDataArr, value)
   } else if p <= v.Persons && p <= (v.Persons + 100) { //符合条件
      log.Println("ChangeValueArr = append2")
      MismatchTimeValueArr[index].ChangeValueArr = append(MismatchTimeValueArr[index].ChangeValueArr, value)
   } else {
      log.Println("检查的人数比实际大的多")
   }
}

Функция следующего кода состоит в том, чтобы сохранить все видеоисточники, которые не соответствуют количеству людей по отдельности, чтобы достичь цели сопоставления количества людей и системы продажи билетов.

sort.SliceStable(SnapArr, func(i, j int) bool { //从小往大,排序
   return SnapArr[i].Persons < SnapArr[j].Persons
})
indexPerson:=len(SnapArr) - 1

log.Println("ChangeValueArr = append3")
MismatchTimeValueArr[index].ChangeValueArr = append(MismatchTimeValueArr[index].ChangeValueArr, SnapArr[indexPerson])
SnapArr = append(SnapArr[:indexPerson], SnapArr[indexPerson+1:]...) //删除已经push进去的数据

Если количество проверенных людей не соответствует системе тикетов, то измените поле «IsSuccess» на false, а true означает, что нет необходимости добавлять замещающий источник видео.

Поэтому видеоисточник после склейки должен изменить "IsSuccess" на true, что означает, что видеоисточник готов. Таким образом, в «ChangeValueArr» не будет значения, и логика кода будет правильной.