Czytnik JSON z lokalizacją tokenów (C++)

0

Cześć,
Poszukuję biblioteki C++ do parsowania formatu json, posiadającej możliwość lokalizacji tokenów w tekście wejściowym (przy założeniu, że wejściem jest plik lub string).
Potrzebuję wczytać strukturę a potem konfigurować na jej podstawie inny podsystem, przy czym w przypadku stwierdzenia niepoprawnych semantycznie danych chciałbym wskazać miejsce w pliku (wiersz/kolumna), które autor pliku powinien sprawdzić.

Z góry dzięki za pomoc :)

0

"przy czym w przypadku stwierdzenia niepoprawnych semantycznie danych"
Co Masz na myśli?

0

Np. w pliku jest ... { "power_level": 1234 } ..., co jest zgodne z formatem JSON, ale wartość power level jest zbyt duża (lub niezgodna z danymi podanymi wcześniej) i chciałbym móc wyświetlić komunikat np. Poziom mocy przekracza wartość nominalną (patrz config.json wiersz 33 kolumna 44). Chodzi mi właśnie o pozycje tokena 1234 albo power_level w pliku (offset albo wiersz/kolumna).

0

ogranij nowe qt
https://doc.qt.io/qt-5/json.html

Widzę jaiś parseError, poczytaj, rozszerz klasy itd.

0
dmc napisał(a):

Np. w pliku jest ... { "power_level": 1234 } ..., co jest zgodne z formatem JSON, ale wartość power level jest zbyt duża (lub niezgodna z danymi podanymi wcześniej) i chciałbym móc wyświetlić komunikat np. Poziom mocy przekracza wartość nominalną (patrz config.json wiersz 33 kolumna 44). Chodzi mi właśnie o pozycje tokena 1234 albo power_level w pliku (offset albo wiersz/kolumna).

Mieszasz zupełnie różne rzeczy. JSon to jest jakiś format danych przeznaczony głównie do transferu danych przez sieć.
Natomiast to co opisujesz jest już częścią logiki biznesowej twojej aplikacji.
Czyli są to dwie zupełne inne warstwy aplikacji, które powinny być od siebie dość odległe.

0

Możliwe, że źle dobrałem przykład - nie oczekuję od parsera takiej funkcjonalności jak weryfikacja power level, etc - to tylko przykład możliwości wykorzystania. Potrzebuję jedynie pozycji wiesz/kolumna dla tokena, abym mógł (w mojej logice biznesowej, jak piszesz) wskazać miejsce błędu. A ponieważ ponieważ standard RFC 4627 jawnie dopuszcza znaki nowej linii jako separatory to jest to funkcjonalność, którą parser mógłby z powodzeniem dostarczać.

0

Zawartość jsona można pobrać jak każdy zwykły tekst, a parsować można "ręcznie", tak samo jak ręcznie można mapować jsona do klas. Chcesz znaleźć wiersz i kolumnę to może przy wczytywaniu danych zliczaj gdzieś wszystkie wczytane znaki i osobno znaki \n

0

Ta biblioteka podobno jest fajna i ma opcję parsowania SAX (konieczne do osiągnięcia twojego wymagania), więc to powinno pomóc rozwiązać problem:
https://github.com/nlohmann/json
Nie analizowałem głębiej, ale powinno dać to zrobić. Nie jest to proste.

1 użytkowników online, w tym zalogowanych: 0, gości: 1