Преобразование строки JavaScript в объект

В настоящее время я работаю над чем-то, что требует от меня превратить строку в объект Javascript. Я пробовал так много разных вещей, искал ответы здесь, но ни один из них не соответствует моей проблеме.

Итак, вот что мне нужно сделать: мне нужно получить содержимое файла JS, которое выглядит примерно так: (я получаю содержимое с помощью простого HTTP-запроса)

initiateOptions({
    fullscreen: true,
    showController: true,
    introModal: true,
    client: {
        name: 'Easyfairs - Flanders Expo',
        city: 'Gent',
        googlePlaceId: 'xxx'
    },
    preloadImages: {
        client: 'easyfairs_flandersexpo'
    },
    languages: ['EN','FR','NL'],
    logo: 'images/logo_wit.png',
    css: ['https://fonts.googleapis.com/css?family=PT+Sans', '/css/event- 
room-card.css', '/css/easyfairs.css'],
    color: '#99cc33',
    explainerImage: ['media/explainerImage.png'],
    /*customTexts: {
        switchYes: [{ "language":"NL", "text":"Beurs" },{ "language":"EN", 
"text":"Exhibition" },{ "language":"FR", "text":"Exhibition" }],
        switchNo: [{ "language":"NL", "text":"Leeg" },{ "language":"EN", 
"text":"Empty" },{ "language":"FR", "text":"Vide" }]
    },*/
});

Мне нужно использовать данные внутри этого файла, поэтому я хочу превратить его в объект JS, с которым я могу правильно работать. Я получаю содержимое файла в виде строки, поэтому я могу удалить функцию окружения с помощью манипуляций со строками и т. д.

Как видите, это JS-объект, обернутый в функцию, которая также содержит закомментированные строки. Мне очень сложно заставить его работать, я знаю, что есть способ заставить его работать с помощью eval(), но я бы предпочел не использовать его.

Кто-нибудь может мне помочь? Спасибо с уважением.

PS: Я не контролирую рабочий процесс, так устроен проект, поэтому мне нужно, чтобы он работал именно так.

Это ужасное требование. У вас есть файл, который вы должны использовать без контроля над файлом, поэтому вам нужно каким-то образом получить файл в виде строки, а затем использовать манипуляции со строками, чтобы получить то, что вам нужно? Мое предложение, постарайтесь сильно сопротивляться этому требованию. Это безумие.

VLAZ 28.03.2019 12:35

Обычно я бы спросил, почему вы не хотите использовать eval(), но в этом случае это довольно ясно, и на самом деле многие (большинство/все?) альтернативы будут одинаково опасны.

Mike Brockington 28.03.2019 12:38

вы получаете строковый объект из запроса GET?

Haritsinh Gohil 28.03.2019 13:52
Поведение ключевого слова "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) для оценки ваших знаний,...
0
3
149
1

Ответы 1

У вас есть два варианта:

  • используйте синтаксический анализатор javascript, например Esprima, передайте ему свои js и пройдите AST, чтобы восстановить объект

  • используйте eval, в соответствии с

js = `initiateOptions({
    fullscreen: true,
    showController: true,
    introModal: true,
    // etc
})`


let initiateOptions = x => x;
let result = eval(js);
console.info(result)

Не пытайтесь использовать строковые функции, регулярные выражения и т. д. для его анализа - вы просто потратите свое время.

Я не могу не подчеркнуть, насколько опасно использовать eval() для данных из URL-адреса.

Mike Brockington 28.03.2019 12:39

@MikeBrockington: ну, наверное, потому что "кто-то может удалить все твои файлы"?

georg 28.03.2019 12:42

Значит, Эсприма будет моим единственным вариантом?

Gust Deprez 28.03.2019 13:25

@GustDeprez: зависит ... это разовая задача или что-то, что вы будете делать на регулярной основе? Кроме того, это клиентская сторона или узел?

georg 28.03.2019 13:30

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

Gust Deprez 28.03.2019 13:44

@GustDeprez: если это клиентская сторона, то этот код из вашего собственного домена, верно?

georg 28.03.2019 13:47

@GustDeprez: если вы контролируете код и можете быть уверены, что в нем нет ничего вредного (например, нет вызываемых функций и т. д.), то ничто не мешает вам использовать eval. Технически было бы намного лучше получить те же данные, что и JSON.

georg 28.03.2019 13:53

Я просто должен проголосовать, потому что это так умно :) Но также потому, что это единственный ответ здесь, который на самом деле работает. Остальные просто не работают и не можем работают с данными OP.

VLAZ 28.03.2019 15:27

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