

{
"car_adblue": "0",
"car_boss": "",
"car_driver": "",
"car_gazatip": "АБ",
"car_marka": "VOLKSWAGEN Passat B6 1.8TSI (2008 р. дв. CDAA,1798см³,МКПП,184 кВт,бензин, 🛞4х2)",
"car_nomer": "",
"car_norma": "11.1",
"car_oil": "0.1",
"car_osoba1": "",
"car_osoba2": "",
"car_speedplan": "0",
"dok_datt_ot": "2026-06-07T13:32:13.788Z",
"dok_datt_po": "2026-06-07T13:32:15.938Z",
"dok_nomer": "999",
"RowsFuel": [
{
"before": "0",
"code": "111003",
"datePL": "2026-06-07T13:32:27.419Z",
"id": "1780839154786-10",
"liters": 0,
"name": "Бензин А-95",
"odometer": 0,
"price": 0,
"received": "100",
"spent": ""
},
{
"before": "0",
"code": "121055",
"datePL": "2026-06-07T13:32:53.713Z",
"id": "1780839179929-906",
"liters": 0,
"name": "Олива 15W-40",
"odometer": 0,
"price": 0,
"received": "12",
"spent": ""
}
],
"RowsWork": [
{
"cargo_name": "",
"cargo_weight": "",
"id": "1780856374331-309",
"km_Distance": "97",
"km_load": "",
"km_tow": "",
"km_trailer": "",
"marshrut": "Київ - Лютіж - Київ - Київ",
"moto_place": "",
"pryb_date": "2026-06-07T19:56:30.635Z",
"speedo_1": "000",
"vyb_date": "2026-06-07T18:19:30.635Z"
}
],
"saveDate": "07.06.2026 21:19:45",
"trailer_marka": "",
"trailer_nomer": "",
"сompany": ""
}
🖥️ 1. Через JavaScript / TypeScript (Frontend або React Native)
Якщо ви розробляєте додаток і скануєте код камерой, використовуйте бібліотеку jszip [1]:
typescript
import JSZip from “jszip”;
export const extractJsonFromQR = async (
base64Data: string,
documentId: string
): Promise => {
try {
if (!base64Data) return;
const zip = new JSZip();
// Завантажуємо ZIP-архів із рядка Base64
const loadedZip = await zip.loadAsync(base64Data, { base64: true });
// Шукаємо файл за ідентифікатором (у коді пакування він був названий як documentId)
const file = loadedZip.file(documentId);
if (!file) {
console.error(`Файл ${documentId} не знайдено в архіві.`);
return;
}
// Зчитуємо вміст як звичайний UTF-8 рядок
return await file.async("string");
} catch (error) {
console.error(“Помилка розпакування:”, error);
return;
}
};
🖥️ 2. Через Node.js (Backend)
Якщо дані відправляються сканером на сервер, для розпакування ідеально підійде легка бібліотека adm-zip:
javascript
const AdmZip = require(“adm-zip”);
function extractJsonFromQRNode(base64Data, documentId) {
try {
if (!base64Data) return null;
// Декодуємо Base64 рядок у бінарний буфер
const zipBuffer = Buffer.from(base64Data, "base64");
// Читаємо архів із пам'яті
const zip = new AdmZip(zipBuffer);
// Витягуємо вміст файлу як текст
return zip.readAsText(documentId);
} catch (error) {
console.error(“Помилка декомпресії в Node.js:”, error);
return null;
}
}
🐍 3. Через Python (Скрипти чи Аналітика)
Якщо ви обробляєте дані у сторонніх скриптах, можна обійтися без встановлення додаткових пакетів, використовуючи лише вбудовані модулі:
python
import base64
import io
import zipfile
def extract_json_from_qr_python(base64_data: str, document_id: str) -> str:
try:
if not base64_data:
return “”
# Декодуємо Base64 у бінарні байти
zip_bytes = base64.b64decode(base64_data)
# Створюємо віртуальний файл в оперативній пам’яті
zip_buffer = io.BytesIO(zip_bytes)
# Відкриваємо буфер як ZIP-архів
with zipfile.ZipFile(zip_buffer, "r") as zip_ref:
if document_id in zip_ref.namelist():
# Читаємо файл та трансформуємо байти в UTF-8 текст
return zip_ref.read(document_id).decode("utf-8")
else:
print(f"Файл {document_id} відсутній в архіві.")
return ""
except Exception as e:
print(f"Помилка в Python: {e}")
return ""


