我正在创建一个本地html页面,以用作我通过youtube-dl下载的视频的查看器。为了使观看者能够工作,它需要能够访问视频元数据。当使用批处理操作将json-json下载完成时,我可以轻松地将youtube-dl的元数据输出传递到单个文本文件中。该文件如下所示,并且每行都有一个不同的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标签(例如<script src="metadata.js"></script>
)加载。 / p>
在批处理文件中,使文件的第一行等于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脚本,我实际上能够实现最初所需的文件结构。 See。 我将@lima_fil的答案标记为正确,因为它仍然是我的问题的有效答案,并且可以帮助某人。
答案 0 :(得分:0)
使用字符串演奏可以给您更多的自由。例如: 创建一个String而不是一个数组,而不是将其转换为array。
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格式{“ key”:“ value”}。