Получение данных json из api -> Синтаксический анализ html внутри атрибута для новой структуры объекта

#javascript #jquery #json

#javascript #jquery #json

Вопрос:

у меня очень специфическая проблема. Я создаю пользовательский интерфейс для внутренней системы управления документами, я получаю некоторую дату, используя JSON-API DMS, но мне нужно получить еще несколько параметров для интерфейса. Команда, которая работает с программным обеспечением, согласилась использовать существующий текстовый параметр «description» для этих значений и начала добавлять блок типа «» в начало большинства документов.

Сейчас я работаю с jquery и monkberry над простым интерфейсом. В основном это работает, но мои коллеги желают получить дополнительные функции… самое большее, что они хотят, — это структура папок, имеющая как минимум 2 уровня. Я сказал им добавить атрибут-параметр «папка =»» и заполнить структуру, как они знают с компьютеров, учитывая пример «папка =’верхняя папка / подпапка'». Теперь мне нужно как-то проанализировать это: D Каков был бы наилучший способ проанализировать такую структуру:

 {
  "documents": [
    {
      "name": "Document A",
      "description": "<attribute folder='topfolderA/subfolder1' visible='' tags='' />This is just a text",
      "scope": "Public",
      "id": "9fcf8270d6d546419a555c4c6fd0ccd5"
    },
    {
      "name": "Document B",
      "description": "<attribute folder='topfolderB/subfolder2' visible='' tags='' />This is just the normal descriptioon Text",
      "scope": "Public",
      "id": "331338eb001c4a48ae3bb164653ae596"
    },
    {
      "name": "Document C",
      "description": "No description written yet",
      "scope": "Private",
      "id": "331338eb001c422easeeseessa3ae596"
    }
  ],
  "about": {
    "roles": [
      "Admin",
      "Author"
    ]
  }
}
  

к структуре объекта / массива, которую я могу перебирать, например

 - folder A
--- subfolder 1
------ Document I
--- subfolder 2
------ Document II
--- Document III
--- Document IV

- folder B
--- subfolder 3
------ Document V
------ Document VI
--- subfolder 4
------ Document VII
--- Document VIII
  

(каждый объект document содержит значения данных)

Есть идеи, как это сделать в ванильном js и / или jQuery? 🙂

Заранее спасибо

Томас

Комментарии:

1. Как мы можем определить, какой документ отправляется в какую папку?

2. папка, к которой принадлежит документ, находится в «<attribute folder=’topfolder / subfolder’ />» в описании 🙂

3. Объект, который вы нам показываете, содержит только список документов без атрибута папки

4. к сожалению, я не могу изменить API DMS, чтобы добавить атрибут папки. поэтому мы решили поместить блок параметров в атрибут описания. взгляните на документы -> Документ A -> Описание

5. Хорошо, я пропустил эту часть, извините. Теперь я понимаю

Ответ №1:

Я думаю, вы можете выполнить простой поиск по регулярным выражениям во время синтаксического анализа.

Некоторый пример фрагмента кода:

  const regex = /folder='([a-z,A-Z,0-9,/]*)'/g;
 const str = `<attribute folder='topfolderA/subfolder1' visible='' tags='' />`;
 var m = regex.exec(str);
  

m это результирующий массив, и он будет выглядеть примерно так, как ["folder='topfolderA/subfolder1'", "topfolderA/subfolder1"] в примере. Первый элемент массива — это полное совпадение регулярных выражений, а элементы в следующих индексах являются разделенными совпадениями, которые мы сохраняем. Мы можем использовать () для сохранения совпадений при выполнении поиска по регулярным выражениям.

Как только у вас будет путь, который в этом случае будет просто:

  var path = m[1];
 var structure = path.split('/');
 //structure array would have sequence of folders and subfolders you'd have to create.
  

Я сохранил демонстрацию регулярного выражения здесь. Не стесняйтесь играть с ним и изменять его в соответствии с вашими потребностями. Регулярное выражение, которое я использовал /folder='([a-z,A-Z,0-9,/]*)'/g , в основном ищет строку "folder" , за которой следуют либо алфавитные цифры, либо косые черты (структуры папок могут содержать и другие вещи, вы можете определить это внутри [] . Я окружаю путь к папке () , поскольку нам нужно получить доступ к этому пути. Флаг g в конце предполагает, что поиск является глобальным. Вы также можете добавить флаг i , который сделает совпадение нечувствительным к регистру. Хорошей отправной точкой для регулярных выражений в javascript являются документы MDN

Комментарии:

1. Но как мне сделать следующий шаг, чтобы создать объект-структуру с папками и документами в ней (и на том же уровне)?