2016-11-05 8 views
3

У меня есть файл уценки импортируемого в модуле узла, как это через WebPack погрузчикновообращенный уценки на объект JSon

import mardownFile from './markdownfile.md'

этот файл представляет собой текст книги с главами, разделенных ##/h2 тега

сейчас, я ищу способ конвертировать это в объект json с каждым тегом h2 (или другой возможной оболочкой) в отдельных фрагментах главы, чтобы использовать с компонентом страницы реакции с содержимым страницы в качестве реквизитов. Подробнее о том, что я пытаюсь решить

У меня есть это в моем markdown.md файле

#Title 
##Chapter 1 
text text 
text 
##Chapter 2 
text 
etc 
##Chapter 3 
more text 
image 

Я хотел бы прочитать эту уценки и преобразовать его в объект, что-то вроде этого ...

var aText = { 
pages: [ 
{ 
"title": "Chapter 1.", 
"text": "text", 
}, 
{ 
"title": "Chapter 2.", 
"text": "text", 
}, 
{ 
"title": "Chapter 3.", 
"text": "text", 
"img": "cat-stevens.png", 
} 
]} 

Затем в Javascript реагируют компонент визуализации компонент страницы, как этот

<Page page={aText.pages[0]} />

Я нахожусь на компьютере Mac OS x, но это персональный проект веб-клиента, я пытался разобрать это в стандартном браузере, я использую Chrome. Каков наилучший подход для этого, какие-либо предложения?

+2

Не могли бы вы предоставить нам пример? Я не уверен, чтобы понять, чего вы хотите достичь. –

+0

Вы на linux, mac или windows? Я могу обновить свой ответ более подробно для вашей ситуации. –

ответ

4

Вы не можете импортировать файл md, потому что импортируете только файлы javascript. Вам нужно использовать некоторый парсер разметки или написать свой собственный. Например markdown-it:

var MarkdownIt = require('markdown-it'); 
var md = new MarkdownIt(); 
var result = md.parse('# markdown-it rulezz!'); 
console.log(result); 

Вы получите:

[Token { 
    type: 'heading_open', 
    tag: 'h1', 
    attrs: null, 
    map: [0, 1], 
    nesting: 1, 
    level: 0, 
    children: null, 
    content: '', 
    markup: '#', 
    info: '', 
    meta: null, 
    block: true, 
    hidden: false 
}, 
    Token { 
    type: 'inline', 
    tag: '', 
    attrs: null, 
    map: [0, 1], 
    nesting: 0, 
    level: 1, 
    children: [[Object]], 
    content: 'markdown-it rulezz!', 
    markup: '', 
    info: '', 
    meta: null, 
    block: true, 
    hidden: false 
}, 
    Token { 
    type: 'heading_close', 
    tag: 'h1', 
    attrs: null, 
    map: null, 
    nesting: -1, 
    level: 0, 
    children: null, 
    content: '', 
    markup: '#', 
    info: '', 
    meta: null, 
    block: true, 
    hidden: false 
}] 
+0

Спасибо, что это сработало бы в качестве основы. Из этого я мог бы прорезать результат, ища главы, чтобы подтолкнуть их к отдельным объектам. –

+0

Это правильный ответ. Любой анализатор Markdown, который выводит список или токены (или любую другую структуру дат с низким уровнем), будет работать. – Waylan

1

Попробуйте markdown-to-json library.

npm install -g markdown-to-json 

Учитывая файл с именем lottery.md я иду в каталог в моем терминале и типа:

m2j lottery.md 

Это выводит JSON на экране.

Если вы используете bash based terminal, вы можете передать этот вывод в такой файл.

m2j lottery.md >> lottery.json 

Который создаст файл под названием JSon lottery.json в той же папке, что и уценки.

Для получения дополнительной помощи Вы можете использовать:

m2j -h 
+0

Я искал веб-клиента, реагирую на решение этой версии cli –

0

Для моего первого поиска по этому я нашел jsonmark пакет, который любопытное то, что вы просили, но он создает объект с порядком и содержанием, которое не является необходимо и сложно изменить его код, поскольку он основан на regexp.

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

Вот мой пример того, как создать объект json на основе уценки. Моя цель состояла в том, чтобы иметь массив json с элементами, которые имеют голову и тело, голова - это h1, а тело - все, что находится под ним. В примере я использую marked в качестве анализатора уценки. (Я запускаю его на nodejs, так как чтение из файла не представляется возможным из файла в противном случае.)

var fs = require('fs'); 
var marked = require('./marked.min.js'); 
var finally = []; 
var heading = ''; 
var lexbody = []; 

var loadmd = function(file){ 
    var markdown = fs.readFileSync(file, 'utf8'); 
    jsonraw = marked.lexer(markdown); 
    finally = []; 
    heading = ''; 
    lexbody = []; 
    jsonraw.forEach(getThem); 
    return finally; 
} 
var getThem = function(item, index){ 
    if (item.type == "heading" && item.depth == 1){ 
    if (heading == ''){ 
     heading = item.text; 
    } else { 
     lexbody['links']=jsonraw.links; 
     finally.push(
     { 
      "heading": heading, 
      "body": marked.parser(lexbody) 
     } 
    ); 
     heading = item.text; 
     lexbody = []; 
    } 
    } else { 
    lexbody.push(item); 
    } 
    // don't leave out the last element 
    if (index == jsonraw.length-1){ 
    lexbody['links']=jsonraw.links; 
    finally.push(
     { 
     "heading": heading, 
     "body": marked.parser(lexbody) 
     } 
    ); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^