Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:将JSON对象数组构造为脚本时出现问题_Javascript_Command Line - Fatal编程技术网

Javascript:将JSON对象数组构造为脚本时出现问题

Javascript:将JSON对象数组构造为脚本时出现问题,javascript,command-line,Javascript,Command Line,我正在创建一个本地html页面,作为我用youtube dl下载的视频的查看器。为了让观看者工作,它需要能够访问视频元数据。当youtube dl使用批处理操作将json作为下载完成后,我可以轻松地将元数据输出通过管道传输到单个文本文件中。该文件如下所示,每行有一个不同的json对象: {Id: "jYDgJjGfha", description: "This video isn't good at all"} {Id: "JDRegIIGfj", description: "This vide

我正在创建一个本地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查看器页面上获取该文件

有人建议我不要尝试将包含元数据的文本文件加载到我的页面中,而是将元数据转换为有效的脚本,并使用脚本标记加载它(例如,

在批处理文件中,很容易使文件的第一行等于
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的答案标记为正确,因为它仍然是我问题的有效答案,可以帮助其他人解决问题。

玩字符串可以给你更多的自由。例如: 创建字符串而不是数组,然后将其转换为数组

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”}。

使用字符串可以给您更多自由。例如: 创建字符串而不是数组,然后将其转换为数组

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”}.

但是,由于跨源保护,我无法在html查看器页面上获取文件。
如果您控制服务器,跨源不是问题。很抱歉,我应该指定,这仅用于本地html文件。现在有服务器,将来也不会有服务器。是否有不使用浏览器存储提供程序的原因?如localStorage、sessionStorage甚至indexedb?如果我错了,请纠正我,但我相信,因为我必须对不同的浏览器使用不同的方法。目标是尽可能少的代码。@FunkyKong本地存储的API(其他也适用)是标准化的,即您将在最流行的浏览器中以相同的方式使用它。如果您需要保存数据(会话)那么,可能您需要的是存储,否则您启动实现的方式可能会更好。
但是,由于跨源保护,我无法在html查看器页面上获取该文件。
如果您控制服务器,跨源不是问题。很抱歉,我应该指定,这是针对上的本地html文件的ly.现在有服务器,将来也不会有服务器。不使用浏览器存储提供程序有什么原因吗?比如localStorage、sessionStorage甚至indexedb?如果我错了,请纠正我,但我相信,因为我必须对不同的浏览器使用不同的方法。目标是尽可能少的代码。@FunkyKong localStorage的API就是一个例子(也适用于其余部分)是标准化的,即您将在最流行的浏览器中以相同的方式使用它。如果您需要保存数据(会话),则可能需要存储,否则您开始实施的方式可能会更好。