Преобразование html в json с помощью pandoc

Я пытаюсь взять html и сгенерировать json, который сохраняет ту же структуру.

Я пытаюсь использовать pandoc, так как раньше мне удавалось преобразовывать вещи из формата A в формат B с помощью pandoc.

Я пытаюсь преобразовать этот файл:

пример.html

<p>Hello guys! What's up?</p>

Используя команду:

pandoc -f html -t json example.html

Я ожидаю что-то вроде:

[{ "p": "Hello guys! What's up?"}]

Что я получаю:

[
  { "Para":
    [
      {"t": "Str", "c": "Hello"},
      {"t": "Space"},
      {"t": "Str", "c": "guys!"},
      {"t": "Space"},
      {"t": "Str", "c": "What's"},
      {"t": "Space"},
      {"t": "Str", "c": "up?"}
    ]
  }
]

Проблема, похоже, в том, что когда pandoc читает текстовое содержимое, он разделяет каждое слово на основе символа пробела и делает из него массив, в то время как я ожидал, что pandoc поймет, что вся строка является одним элементом.

Я новичок в pandoc, и я не смог узнать, как настроить это поведение.

У вас есть идея, как я могу получить желаемый результат? Вы знаете другой инструмент, который может сделать это? Инструмент или язык, на котором он написан, не имеет значения.

Спасибо.

Изменить: вы можете протестировать это поведение онлайн на этом онлайн-инструмент pandoc.

Изменить 2: Обходной путь. Я не мог найти, как выполнить преобразование HTML-> JSON с помощью pandoc. В качестве обходного пути я использовал предложение, предложенное в комментариях, и реализовал решение, используя Himalaya, который является пакетом узла. Результат именно то, что я хотел, даже если он не использует pandoc.


person Loïc N.    schedule 21.09.2018    source источник
comment
Не умничай, но почему вы ожидаете такого результата? Я не вижу в документации форматирования вывода.   -  person Pogrindis    schedule 21.09.2018
comment
Я знаю один проект, который работает ближе к тому, что вы ожидаете: github.com/andrejewski/himalaya Демонстрация: jew.ski/himalaya   -  person Pogrindis    schedule 21.09.2018
comment
@Pogrindis Привет, я не пытаюсь сказать, что такое поведение не соответствует документации. В основном я ожидал, что он будет вести себя по-другому. Вот почему я прошу помощи. Возможно, есть возможность изменить это поведение, но я не знаю pandoc. Так что я надеялся, что кто-то здесь знает. Спасибо за ссылку на Гималаи, посмотрю.   -  person Loïc N.    schedule 21.09.2018
comment
@ЛоикН. JSON в вопросе похож на вывод, созданный pandoc, но не идентичен. Я предполагаю, что это потому, что была задействована некоторая ручная транскрипция. Я рекомендую использовать jq, чтобы получить удобочитаемый JSON, например: echo "<p>Hello guys! What's up?</p>" | pandoc -f html -t json | jq.   -  person tarleb    schedule 21.09.2018
comment
@tarleb Привет, тарлеб. Спасибо за предложение. Я протестировал ваше решение, но, насколько я вижу, оно реструктурировало результат таким образом, чтобы его было легче читать, но сама структура кажется неизменной.   -  person Loïc N.    schedule 21.09.2018
comment
Верно. Мой комментарий существует исключительно для того, чтобы указать, как можно было вставить фактический вывод JSON в вопрос. Смотрите мою правку.   -  person tarleb    schedule 21.09.2018
comment
@tarleb Да, извини за это. Я неправильно прочитал ваш ответ. Да, вы были правы, я сначала использовал письменную транскрипцию, поэтому вывод не был точно таким же, как фактический вывод. Спасибо за редактирование моего исходного сообщения с правильным значением.   -  person Loïc N.    schedule 21.09.2018
comment
@PoGrindis Я пошел с Гималаями, спасибо.   -  person Loïc N.    schedule 24.09.2018


Ответы (2)


В настоящее время представление pandoc JSON не очень удобочитаемо для человека, но автоматически генерируется из типов данных pandoc в Haskell (он же документ AST). Есть некоторые обсуждения, чтобы изменить это в конечном итоге.

Я думаю, вы ищете что-то вроде https://codebeautify.org/xmltojson? Кроме того, существует множество инструментов командной строки, которые делают это.

person mb21    schedule 21.09.2018
comment
Привет. Я точно ищу что-то вроде codebeautify, но они не указывают инструменты, которые они используют в своем веб-интерфейсе. Я пытался использовать модуль узла xml-js, но он выдает ошибки при попытке прочитать мой html, в то время как он очень хорошо работает для других реальных файлов xml, которые более сложны, чем то, что я тестировал. Вот почему я пытаюсь получить html-›json, а не xml-›json. Если я не могу найти инструмент xml, который терпим к html. Пока это работает, это все, что имеет значение. В настоящее время я тестирую himalaya в соответствии с рекомендациями Подгриндиса. - person Loïc N.; 21.09.2018

Pandoc, это инструмент для преобразования документов, json представление документа, это просто еще одно представление, которое Pandoc может обрабатывать для AST (абстрактного синтаксического дерева)

Original Document --> Pandoc's AST --> Output Document
                   |                |
                pandoc           pandoc

Просить pandoc вывести json означает запрашивать дерево AST в его формате json,

Если я правильно понимаю, вам понадобится что-то вроде преобразователя xml в json, например этот модуль Python xmljson или онлайн-инструмент, такой как этот.

Есть много инструментов для этой работы, как вы себе это представляете, просто конвертируйте XML в JSON Google.

Представление json AST, используемое в pandoc, обычно используется для вывода его из pandoc и передачи его в другую программу, которая может обрабатывать файлы json, поэтому вы можете изменять AST и создавать фильтры для управления структурой вашего документа.

person ekiim    schedule 03.10.2018