Wpis z mikrobloga

#programowanie #java może tutaj ktoś wie, mam dość nietypowe dane w postaci:
Przykładowo {"name": "some name"} some other data 56 {43}
nie ma żadnych zasad, separatorów, ani żadnych pewnych faktów, więc poszukuje jakiejś biblioteki do parsowania jsona która potrafi to sparsować tak by dało się potem określić gdzie skończył się json - i tym samym wydzielić potem dane.

Gson niestety niezbyt chce mi pomóc, bo nawet jak mam Readera z danymi i wrzucę go w son readera to da radę odczytać jsona bez błędów, ale z powodu wewnętrznego buforowania zje prawie wszystkie dane i nie da się określić gdzie się json skończył.
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Paczek_w_masle: nie mam żadnej klasy, wczytuje na żywca obiekt jsona, bo potem dopiero to leci do innego systemu, więc potrzebuje tylko czegoś co potrafi to spakować do jakiegoś drzewka, tak ja gson ma JsonElement itd.

String str = "{\"name\": \"some name\"} some other data";
Gson gson = new GsonBuilder().setLenient().create();
StringReader stringReader = new StringReader(str);
JsonReader jsonReader
  • Odpowiedz
@Pruderyjny: ale odróżnić nie ma żadnego problemu, każdy parser jsona bez pośrednio to łyka jak tylko go skonfigurujesz, problem tylko taki, że nie chce powiedzieć gdzie skończył łykać, refleksjami mógłbym to w 3 sekundy wyciągnąć i rozdzielić - no ale to nie rozwiązanie.
  • Odpowiedz
@GotoFinal no ale to bez sensu, wystarczy że w jsonie zmieni się kolejność i to już nie zadziała. To jest chyba klasyczny XY problem. Może powiedz poprostu o co chodzi.

Na myśl przychodzi mi tylko żeby wysłać listę pól które udało się odczytać i porównać z listą docelową, ale nie wiem czy o to chodzi.
  • Odpowiedz
@Paczek_w_masle: wut? co tobie z kolejnością w jsonie nie pasuje? w środku jsona można być cokolwiek, mogę taki praser spokojnie w 2-3 dni ładnie napisać i przetestować, ale nie chce mi się. Cały problem z tym co chce osiągnąć jest tylko z buforowanie w gsonie - bez tego buforowania by to działało bez problemu.

Kompletnie chyba nie rozumiesz problemu,mnie nie obchodzi co jest w tym jsonie, tylko by go odczytać
  • Odpowiedz
@GotoFinal: czekaj czekaj.. chcesz sparsować stringa, wziąć samego jsona a resztę odciąć? Przykładowo:

kupa { "json" : "ktorychcepobrac" } tutaj jakieś śmieci które można wywalić?


Napisanie takiego parsera to zdecydowanie nie 2-3 dni xD liczysz ile masz lewych klamerek i potem odcinasz po odpowiedniej ilości klamerek zamykających. Wiadomo że mogą być zagnieżdżone obiekty więc trzeba wziąć na to poprawkę.
  • Odpowiedz
@Paczek_w_masle: i klamerki mogą być w środku stringa, z escape lub bez, i dodasz jeszcze kilka zasad i masz całego parsera jsona, dodajesz obiekty drzewka jak JsonObject, JsonArray, JsonPrimitive, + drugi dzień na napisanie testów. no chyba że robisz posiedzenie 12+ godzinne.

I inne dane są tylko po jsonie. i obie części mnie interesują i json i te co po prawej.
  • Odpowiedz