![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam dość sporego JSON`a (172 MB) którego oczywiście chcę jakoś przeczytać, jednak json_decode() zwraca błąd nr. 5 - JSON_ERROR_UTF8 "Nieprawidłowe znaki UTF-8. Możliwe, że nieprawidłowo zakodowane". Większość edytorów pc/online gubi się przy tak dużym pliku (albo zżera mi ram i procesor, albo otwiera się np. w sublime text aczkolwiek poruszanie się po nim nie należy do przyjemnych - jedno przewinięcie kilka sekund i kolejne). W jaki inny sposób mogę zidentyfikować i poprawić ten błąd? Macie jakieś pomysły? PS. dokładnie jest to geojson - ale struktura jest taka sama jak json. Próbowałem z :
jednak bez efektów. Ed. 1 mb_detect_encoding zwraca UTF-8 Ed. 2 Podzieliłem go na 180 partów. Żeby łatwo wyłapać początek i koniec: Początek - http://wklej.to/LtAQp Koniec - http://wklej.to/d1zu4 Struktura wydaje się być w porządku - tylko ten problem z kodowaniem. Ed. 3 Problem rozwiązany. Ed. 4 Jednak problem dalej istnieje. Główny problem to json_decode który przy pliku *.json ważącym 180 MB potrafi zeżreć kilka GB ram-u (lokalnie serwer padł przy 2 GB, drugi serwer zatrzymał się na 3.5 GB). Wiecie czemu tak jest? Rozwiązaniem było stremowanie pliku *.json tak aby ograniczyć zużycie RAM`u. Używałem tych dwóch bibliotek: https://github.com/salsify/jsonstreamingparser - Po ok. 30 minutach skrypt się wysypał z tym samym skutkiem (brak RAM`u). https://github.com/kuma-giyomu/JSONParser - Po ok. 10 minutach skrypt się wysypał "Terminated" Spotkał się ktoś z Was kiedyś z takim problemem? Macie jakieś pomysły? @up pomoc nadal potrzebna, problem jednak nie jest rozwiązany a może ktoś coś podpowie ![]() Ten post edytował markuz 16.02.2015, 17:49:54 -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Możesz podać linka do calego JSON ?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
JSON był konwertowany z pliku *.shp za pomocą ogr2ogr
Do pobrania: https://drive.google.com/file/d/0B_6i5mSFJC...iew?usp=sharing -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Możesz pobierać linijka po linijce za pomocą fgets i sprawdzaj czy linijka zaczyna się od
Kod { "type" Jeżeli tak to przepuść ją przez json_decode i tak aż Ci się skończy plik. Tylko musisz po przemieleniu paczki wywalać zmienne żeby Ci pamięć nie zapchała. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
@Pyton_000 zrobiłem jak mówiłeś, problem się powtórzył gdy okazało się, że 1 linijka ma 1kk+ znaków. Napisałem to w python - działa szybko i bez zarzutów - kodu mniej. Wzrost zużycia RAM-u niezauważalny. Chyba pomyślę o pythonie na poważnie
![]() Ten post edytował markuz 19.02.2015, 15:24:59 -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Też się nad tym zastanawiałem czy Pythona nie ruszyć ale jakoś tak brak mi zapędów w tą stronę
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 06:25 |