Recent

Author Topic: Пытаюсь распарсить 2 JSONа и скопировать значениия  (Read 8438 times)

avk

  • Hero Member
  • *****
  • Posts: 505
    • my self-education project
... в FPJson (JsonConf) он как раз хорош.
Хотелось бы верить.
И что же скажет этот валидатор насчёт вышеупомянутых трёх JSON-ов?

Alextp

  • Hero Member
  • *****
  • Posts: 1477
    • UVviewsoft
Вот что-

1)
  {"a": 1.e-}
 
Invalid character at line 1, pos 12: '}'

2)
  []]

"...." is not a valid JSON configuration file.

3)
{"a":"b"}#

no errors.

avk

  • Hero Member
  • *****
  • Posts: 505
    • my self-education project
А если заменить {"a": 1.e-} на
Code: Text  [Select][+][-]
  1.   {"a": 01.e-01}
  2.  
Ясно, что от такой замены он не станет валиднее.

Alextp

  • Hero Member
  • *****
  • Posts: 1477
    • UVviewsoft
Нет, новый json file парсится ОК. Число читается. И вообще, тут про новый парсер говорили. :)

avk

  • Hero Member
  • *****
  • Posts: 505
    • my self-education project
Нет, новый json file парсится ОК. Число читается...
В итоге имеется валидатор, который требует валидации.
... И вообще, тут про новый парсер говорили. :)
Так у нового парсера те же проблемы.
« Last Edit: August 21, 2021, 02:59:45 am by avk »

Alextp

  • Hero Member
  • *****
  • Posts: 1477
    • UVviewsoft
Нет проблемы с валидацией. Верный json file поймется верно. Неверный- ну да, некоторые ошибки не поймает, и фиг с ним.

avk

  • Hero Member
  • *****
  • Posts: 505
    • my self-education project
Ну на нет и суда нет.:)

Кажется, информация об исключительной тормознутости FpJson на больших файлах тоже немного преувеличена.Он, конечно, не самый быстрый, но и не самый медленный. Скормил вот этот джейсон парсерам, которые оказались под рукой.
Места распределились как-то так:
Code: Text  [Select][+][-]
  1.   Mormot2.TDocVariant: 1430 ms.
  2.   lgJson:              2970 ms.
  3.   JsonTools:           4730 ms.
  4.   FpJson:              7174 ms.
  5.   UJson:              10877 ms.
  6.   lkJson:             16468 ms.  
  7.  

BeniBela

  • Hero Member
  • *****
  • Posts: 820
    • homepage
By the way, my Internet Tools also have a JSON parser

I put in that citylots.json file and got:

Code: Text  [Select][+][-]
  1. Internet Tools JSON Scanner:                         508 ms
  2. FpJson JSON Scanner:                                2706 ms
  3. Internet Tools JSON Parser + Bero's PasDblStrUtils: 6542 ms
  4. Internet Tools JSON Parser:                         7171 ms
  5. FpJson JSON Parser:                                 8343 ms
  6.  


Alextp

  • Hero Member
  • *****
  • Posts: 1477
    • UVviewsoft
FpJson JSON Scanner:                                2706 ms
FpJson JSON Parser:                                 8343 ms

Из-за чего вообще такая разница? Первый JSON Scanner не использовал прямо, сам не пойму. вот бы оптимизировать.

BeniBela

  • Hero Member
  • *****
  • Posts: 820
    • homepage
Из-за чего вообще такая разница? Первый JSON Scanner не использовал прямо, сам не пойму. вот бы оптимизировать.

It does not create any TJsonData. And it does not load the entire document in memory. You get just one token at a time: E.g. If the input is {"a": "b"}, the scanner returns CurToken = tkCurlyBraceOpen, tkString("a"), tkColon, tkWhitespace, tkString("b"), tkCurlyBraceClose


avk

  • Hero Member
  • *****
  • Posts: 505
    • my self-education project
Как BeniBela уже объяснил, это разница между "пробежать по строке и побить её на токены" и "пробежать по строке и побить её на токены" + "проверить синтаксис" + "построить в динамической памяти дерево документа". Все парсеры в моём списке выше строят дерево.
Но в lgJson есть и просто валидатор("пробежать по строке и побить её на токены" + "проверить синтаксис"), он отрабатывает citylots.json примерно за 520 мс, а Mormot2.IsValidJson() за 220 мс. Правда Мормоту тут особой веры нет, у него всё джейсон, что шевелитсясодержит хоть одну курвоскобку.

Alextp

  • Hero Member
  • *****
  • Posts: 1477
    • UVviewsoft
Спасибо за обьяснение.

Red_prig

  • New Member
  • *
  • Posts: 18
возможно в текущей версии это поправили. у меня была проблема когда поле строки данных json было слишком длинным (а в частности в поле был впихнут большой xml файл). Да же не спрашивайте зачем так.  :)

 

TinyPortal © 2005-2018