SimpleUI simplebase JSON DecodeError: Invalid control character

есть несколько вопросов по SimpleUI SimpleBase Коды маркировки ЧЗ (Чесный знак - вода)

Обработчик onInput на форме с элементом "Штрихкод"

import android
import general

if hashMap.get("listener")=="barcode" and hashMap.containsKey("qrcode"):
    
    qrcode = hashMap.get("qrcode")
    БазаGTIN = json.loads(hashMap.get("_БазаGTIN"))
    
    ТоварИД = ""
    for itm in БазаGTIN:
        if qrcode.find(itm["GTIN"])>-1:
            ТоварИД = itm["ИД"]
            break
    
    if ТоварИД == "":
        raise Exception('Не найден Товар в базе товаров GTIN')
    
    rec = json.loads('{"_id" : "' + qrcode + '"}', strict=False)
    rec["vedid"] = hashMap.get("_ВедомостьИД")
    rec["adrid"] = hashMap.get("_АдресИД")
    rec["tovid"] = ТоварИД
    
    general.db['scan'].insert(rec, upsert=True)

Обработчик OnStart этой же формы где заполняется список отсканированных QR кодов ЧЗ

import android
import general

....

    data = {
        "vedid" : hashMap.get("_ВедомостьИД"),
        "adrid" :  hashMap.get("_АдресИД")
    }
    
    QRКодыОтсканированный = general.db['scan'].find(data)
    android.notification(json.dumps(QRКодыОтсканированный,ensure_ascii=False))
    #android.notification(json.dumps(QRКодыОтсканированный))
  1. проблема периодически ??? как то не понятно после перезапуска приложения и/или после изменения конфигурации в обработчике onStart выдается ошибка:

JSON DecodeError: Invalid control character

  1. general.db['scan'].find(data) - выбирает все записи, поиск не отрабатывает

PS оба вопроса так или иначе связаны и возникают в одном контексте


Ответы (1 шт):

Автор решения: Dmitry Vorontsov

У вас SimpleBase , в коде ЧЗ могут присутствовать символы, которые ломают JSON(они не экранируется). Рекомендую переключиться на Pelican - там все что надо сделать - поменять определение инстанса БД. Синтаксис одинаковый. Использовать как _id лучше не сам код, а его хеш. так точно проблем не будет. Пишете - через хеш и получаете тоже.

→ Ссылка