Є JSON регулярною мовою?


19

Мені було цікаво, чи специфіка JSON визначає звичайну мову. Це здається досить простим, але я не впевнений, як це довести сам.

Причина, яку я запитую, полягає в тому, що мені було цікаво, чи можна використовувати регулярні вирази для ефективного розбору JSON.

Чи міг би хтось із достатньою кількістю представників створити для мене теги та ?


6
Я видалив тег [json], оскільки він, здається, не варто тегу на TCS SE.
Цуйосі Іто

@Tsuy, добре звучить. Очевидно, що я не завзятий користувач сайту, тому я впевнений, що ти знаєш краще.
jjnguy

1
Пам’ятайте, що впровадження регулярних виразів часто відповідає більш ніж звичайним мовам. Наприклад, ви можете використовувати lookaheads у більшості реалізацій, які вірно приймуть , вирішуючи проблему згадану нижче. [ n x ] nанбн[нх]н
Xodarap

Відповіді:


28

Оскільки не є звичайною мовою, то і JSON не є, оскільки [ n 5 ] n є дійсним введенням для будь-якого n . Аналогічно, ваш регулярний аналізатор виразів повинен був би правильно відхилити будь-який вхід [ m 4 ] n, де m n, що ви не можете зробити з регулярними виразами.анбн[н5]нн[м4]нмн

Отже, JSON не є регулярним.


Цікаво, що тут використовується тут із позначенням суперскрипту / дужки?
jchook

1
@jchook Суперскрипт означає «повторюється». Так п буде а повторювані п раз. Аналогічно позначення [ n означає [ повторено n разів. Дужки не мають особливого значення. Звичайна мова не може «підрахувати» кількість дужок на кожній стороні, тому вони не можуть визначити, чи мають обидві сторони однакову кількість дужок. анан[н[н
Нік Оделл

31

Ні, це не регулярно. Оскільки це дозволяє довільно вставляти збалансовані роздільники, воно повинно бути принаймні без контексту.

Наприклад, розглянемо масив масивів масивів:

[ [ [ 1, 2], [2, 3] ] , [ [ 3, 4], [ 4, 5] ] ] 

Зрозуміло, ви не могли розібратися з справжніми регулярними виразами.


8
Для тупих мудрувати, то JSON представлення всіх масивів масивів масивів цілих чисел є регулярним.
Чарльз Стюарт

16
Потім продовжуйте додавати "масиви" рекурсивно, поки не будете задоволені. ;-)
Марк Хаманн

1
Стандартний JSON є без контексту, але більшість реалізацій підтримують лише унікальні ключі. Я переніс своє без відповіді на запитання із stackoverflow
Якоб

Зауважте, що я сказав "принаймні без контексту".
Марк Хаманн

Розширюючись на коментар @ CharlesStewart, чи означає це, що "JSON зі строгою максимальною глибиною є звичайною мовою"? Або інші функції JSON запобігають цьому?
jchook
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.