Преобразование HTML в JSON в react-native

Я хочу преобразовать HTML, полученный из сетевого запроса, в JSON, чтобы я мог легко читать значения. Если есть способ читать значения прямо из HTML, дайте мне знать в комментарии
Я нашел эту библиотеку: https://github.com/andrejewski/himalaya
но когда я пытаюсь запустить пример в своем приложении, я получаю сообщение об ошибке Cannot read property prototype of undefined, поэтому я предполагаю, что эта библиотека не работает в react-native, потому что она содержит основной модуль Node JS. Это был код:

import {parse} from 'himalaya'
const html = this.state.html
const json = parse(html)
console.info('?', json)

Примером HTML может быть:

<div class='post post-featured'>
  <p>Himalaya parsed me...</p>
  <!-- ...and I liked it. -->
</div>

Ожидаемый результат этого HTML:

[{
  type: 'element',
  tagName: 'div',
  attributes: [{
    key: 'class',
    value: 'post post-featured'
  }],
  children: [{
    type: 'element',
    tagName: 'p',
    attributes: [],
    children: [{
      type: 'text',
      content: 'Himalaya parsed me...'
    }]
  }, {
    type: 'comment',
    content: ' ...and I liked it. '
  }]
}]

Есть ли другой способ / библиотека для преобразования HTML в JSON в собственном реагировании?

если вы предоставите написанный вами код, я смогу помочь. Похоже, вам нужно использовать window.himalaya.parse(html) на стороне клиента.

Paul Fitzgerald 30.12.2018 01:45

Добавил код (взял прямо из документации)

joshkmartinez 30.12.2018 01:47

У вас есть доступ для изменения ответа сервера?

Manuel Eduardo Romero 30.12.2018 01:49

У вас есть HTML-код, который вы пытаетесь преобразовать?

Manuel Eduardo Romero 30.12.2018 01:49

У меня нет доступа для изменения ответа сервера, это сторонний API.

joshkmartinez 30.12.2018 01:49

В html есть конфиденциальные данные, поэтому мне неудобно делиться ими. Я отредактирую вопрос, включив в него пример HTML

joshkmartinez 30.12.2018 01:51

см. рабочий ответ ниже @joshkmartinez

Paul Fitzgerald 30.12.2018 02:01

Я проверю это

joshkmartinez 30.12.2018 02:02

Я реагирую, не реагирую, ваш ответ реагирует

joshkmartinez 30.12.2018 02:03

Вы удалили свой ответ @PaulFitzgerald? Я этого больше не вижу

joshkmartinez 30.12.2018 02:12

Не могли бы вы предоставить трассировку стека ошибки? Это может привести к тому, что ошибка будет выброшена в исходный код библиотеки, чтобы лучше определить и понять ошибку.

aercie 30.12.2018 06:04

В коде ошибки нет трассировки стека, все, что я знаю, это то, что когда я удаляю код, ошибка исчезает, поэтому она должна быть из библиотеки

joshkmartinez 30.12.2018 07:43

И исходный код библиотеки, и перенесенный JavaScript не используют ключевое слово new и не пытаются получить доступ к объекту prototype функции / объекта. Библиотека также, похоже, не использует никаких других зависимостей.

aercie 30.12.2018 18:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
13
3 924
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нет проблем с использованием пакета, который вы упомянули в React Native. Все работает должным образом, если вы выполнили все необходимые шаги:

Установите himalaya:

cd project_dir
npm install himalaya

Добавьте требуемый import вверху файла:

import {parse} from 'himalaya';

Установите свойство html в state где-нибудь в вашем коде, до анализирует результат HTML:

this.setState = { html: '<div>Example HTML content</div>' };

Преобразуйте HTML в JSON с помощью объекта parse:

const html = this.state.html;
const json = parse(html);
alert(JSON.stringify(json));

Вы можете проверить, что приведенный выше код работает должным образом в эта закуска.

Интересный. Замечательно, что библиотека работает в React Native, хотя я не понимаю, как она будет пытаться получить доступ к prototype. Очевидно, это связано с этой конкретной строкой, но я надеюсь, что это сработает!

aercie 30.12.2018 18:29

@Arct действительно ошибка, указанная в вопросе, не кажется связанной, но проблема могла быть вызвана каким-то неуместным кодом. Я надеюсь, что связанный Snack поможет OP найти дополнительные строки в нужном месте, и, возможно, другие люди будут искать в Google эту проблему, чтобы найти быстрое руководство.

Siavas 30.12.2018 18:39

Думаю, это правда. Мне любопытно, что именно вызывает ошибку, но, честно говоря, это может быть что угодно. Однако ваш ответ доказал, что библиотека работает, и это здорово. Этот пример - отличный способ собрать некоторый пример кода :) Надеюсь, ОП сочтет это полезным!

aercie 30.12.2018 18:49

Я понял! Я обновил expo до v31.0.0, и он начал работать. Спасибо!

joshkmartinez 30.12.2018 20:12

Другие вопросы по теме