Я хочу преобразовать 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 в собственном реагировании?
Добавил код (взял прямо из документации)
У вас есть доступ для изменения ответа сервера?
У вас есть HTML-код, который вы пытаетесь преобразовать?
У меня нет доступа для изменения ответа сервера, это сторонний API.
В html есть конфиденциальные данные, поэтому мне неудобно делиться ими. Я отредактирую вопрос, включив в него пример HTML
см. рабочий ответ ниже @joshkmartinez
Я проверю это
Я реагирую, не реагирую, ваш ответ реагирует
Вы удалили свой ответ @PaulFitzgerald? Я этого больше не вижу
Не могли бы вы предоставить трассировку стека ошибки? Это может привести к тому, что ошибка будет выброшена в исходный код библиотеки, чтобы лучше определить и понять ошибку.
В коде ошибки нет трассировки стека, все, что я знаю, это то, что когда я удаляю код, ошибка исчезает, поэтому она должна быть из библиотеки
И исходный код библиотеки, и перенесенный JavaScript не используют ключевое слово new и не пытаются получить доступ к объекту prototype функции / объекта. Библиотека также, похоже, не использует никаких других зависимостей.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет проблем с использованием пакета, который вы упомянули в 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. Очевидно, это связано с этой конкретной строкой, но я надеюсь, что это сработает!
@Arct действительно ошибка, указанная в вопросе, не кажется связанной, но проблема могла быть вызвана каким-то неуместным кодом. Я надеюсь, что связанный Snack поможет OP найти дополнительные строки в нужном месте, и, возможно, другие люди будут искать в Google эту проблему, чтобы найти быстрое руководство.
Думаю, это правда. Мне любопытно, что именно вызывает ошибку, но, честно говоря, это может быть что угодно. Однако ваш ответ доказал, что библиотека работает, и это здорово. Этот пример - отличный способ собрать некоторый пример кода :) Надеюсь, ОП сочтет это полезным!
Я понял! Я обновил expo до v31.0.0, и он начал работать. Спасибо!
если вы предоставите написанный вами код, я смогу помочь. Похоже, вам нужно использовать
window.himalaya.parse(html)на стороне клиента.