Javascript: проблемы структурирования массива объектов JSON в виде скрипта - PullRequest
1 голос
/ 02 июля 2019

Я создаю локальную html-страницу для просмотра видео, которое я скачал с youtube-dl. Чтобы зритель работал, он должен иметь доступ к метаданным видео. Я могу легко передать вывод метаданных из youtube-dl, когда он заканчивает загрузку в формате json, в один текстовый файл с помощью пакетной операции. Этот файл выглядит следующим образом, и в каждой строке есть свой объект json:

{Id: "jYDgJjGfha", description: "This video isn't good at all"}
{Id: "JDRegIIGfj", description: "This video is terrible"}
{Id: "VkdwjDoG", description: "Why am I downloading these?"}

Однако из-за защиты от перекрестного источника я не могу получить файл на моей странице просмотра html.

Мне было предложено вместо попытки загрузить текстовый файл с метаданными на мою страницу, чтобы я преобразовал метаданные в допустимый скрипт и загрузил его с тегом скрипта (например, <script src="metadata.js"></script>).

В командном файле было просто сделать первую строку файла равной const database = [ и добавлять запятую каждый раз, когда выводится строка json. Вот как выглядит файл, содержащий метаданные:

const database = [
{Id: "jYDgJjGfha", description: "This video isn't good at all"},
{Id: "JDRegIIGfj", description: "This video is terrible"},
{Id: "VkdwjDoG", description: "Why am I downloading these?"},

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

Я подумал о нескольких разных способах структурирования файла сценария метаданных, но ни один из них, похоже, не вполне соответствует моим потребностям:

Например: этот подход может сработать, но у меня нет возможности найти правильный индекс для установки моей строки при добавлении его в командный файл;

const database = [];
database[0] = {Id: "jYDgJjGfha", description: "This video isn't good at all"};
database[1] = {Id: "JDRegIIGfj", description: "This video is terrible"};
database[2] = {Id: "VkdwjDoG", description: "Why am I downloading these?"};

И этот подход определенно сработает, но я беспокоюсь о его производительности на моем большом файле:

const database = [];
database.push(database [I] = {Id: "jYDgJjGfha", description: "This video isn't good at all"});
database.push({Id: "JDRegIIGfj", description: "This video is terrible"});
database.push({Id: "VkdwjDoG", description: "Why am I downloading these?"});

Существуют ли другие способы структурирования файла сценария метаданных, чтобы превратить его в действительный сценарий?

Редактировать На самом деле я смог достичь изначально желаемой файловой структуры, изменив свой командный файл на скрипт PowerShell. См . Я пометил ответ @ lima_fil как правильный, потому что он все еще является верным ответом на мой вопрос и может помочь кому-то в дальнейшем.

1 Ответ

0 голосов
/ 02 июля 2019

Игра со струной может дать вам больше свободы. Например: Создайте строку вместо массива, затем преобразуйте ее в массив.

var dbString = '[null' 
+ ',{"Id": "JDRegIIGfj", "description": "This video is terrible"}' 
+ ',{"Id": "VkdwjDoG", "description": "Why am I downloading these?"}'

Чем преобразовать его в массив:

var dbArray = JSON.parse(window.dbString + ']');

Обратите внимание, что объект должен быть в формате JSON {"ключ": "значение"}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...