Я бы сначала написал «токенизатор» для синтаксиса данных, которые я анализировал. Токенизатор - это (относительно) простой процесс, который разбивает строку на ряд фрагментов или токенов. Например, в первых двух случаях ваши основные токены будут состоять из: "{", "}", ":", ";", а все остальное будет интерпретировано как токен данных. Это можно сделать с помощью цикла, рекурсивной функции или ряда других способов. Токенизация вашего второго примера создаст массив (или какой-то другой вид списка) со следующими значениями:
"{", "link", ":", " article123456 ", ";", " title", ":", " Read about article 123456 here ", "}"
Следующим шагом будет «очистить» ваши данные, хотя в этих случаях все, что на самом деле означает, - это удаление нежелательных пробелов. Выполните итерацию по созданному массиву токенов и измените каждый токен, чтобы не было начальных или конечных пробелов. Этот шаг можно сочетать с токенизацией, но я думаю, что гораздо проще и понятнее делать это отдельно. Тогда ваши токены будут выглядеть так:
"{", "link", ":", "article123456", ";", "title", ":", "Read about article 123456 here", "}"
И, наконец, фактическая «интерпретация». Вам нужно будет преобразовать ваш массив токенов в любую фактическую структуру данных, которую вы собираетесь использовать в качестве конечного продукта процесса синтаксического анализа. Для этого вам определенно понадобится рекурсивная функция. Если функция вызывается для токена данных, за которым следует токен двоеточия, за которым следует токен данных, она будет интерпретировать их в паре ключ-значение и, соответственно, создаст структуру данных. Если он вызывается для серии токенов с точками с запятой, он разбивает токены на каждую точку с запятой и вызывает себя в каждой из полученных групп. И если он вызывается на токенах, содержащихся в фигурных скобках, он будет вызывать себя на содержащихся токенах, прежде чем делать что-либо еще. Обратите внимание, что это не обязательно порядок, в котором вы хотите проверять эти различные случаи; в частности, если вы намереваетесь вложить фигурные скобки (или любой другой вид группировочных токенов, например квадратные скобки, угловые скобки или круглые скобки), вы должны будете затем интерпретировать эти токены в правильном порядке вложенности. 1007 *
Результатом этих процессов будет полностью проанализированная структура данных любого типа, который вы захотите. Имейте в виду, что этот процесс предполагает, что все ваши данные неявно хранятся как строковый тип; если вы хотите, чтобы «3» и «3» интерпретировались по-разному, то все становится немного сложнее. Этот метод, который я описал, вовсе не является единственным способом сделать это, но это то, как я подхожу к проблеме.