javascript - 如何在 Perl 中打开 javascript 对象?

标签 javascript json perl object

我有一个包含 5.5mb 经度纬度数据的 JavaScript 对象文件,我想在 Perl 中打开它,这样我就可以应用粗略的细节减少算法,然后用减少的数据集保存一个新的对象文件。为了减少细节,我使用了一个 for 循环,只需要每 20 个长/纬度对。

我可以在 JavaScript 中执行此操作,但这需要我复制/粘贴每个坐标集并一次运行一个 JavasSript。

然后我想也许我可以获取每组坐标并将它们放入 SQL 数据库中,但这似乎是一种粗略的方法。并移动大量数据。

我认为 Perl 是更好的选择之一,可以在服务器上完成这一切。

我可以使用以下方式打开文件:

#!/usr/bin/perl

# open file
 open(FILE, "reduced_object_latlng.js") or die("Unable to open file");

# read file into an array
@data = <FILE>;

# close file 
close(FILE);

# print file contents
foreach $line (@data)
{
    print $line;
}

该对象遵循以下设计:

var paths = {
    mayo: {
        name: 'Mayo',
        colour: 'green',
        coordinates: '-9.854892,53.76898 -9.853634,53.769338 -9.85282,53.769387 -9.851981,53.769561 -9.850952,53.769508 -9.850129,53.769371 -9.849136,53.769171 **data**' 
    },
    galway: {
        name: 'Galway',
        colour: 'purple',
        coordinates: '**data**;
    }
}; //etc.

为了说明如何减少上述数据,我的 javascript 版本从一个文件加载 var coords = "*data*"

coords = coords.split(" ");
var path = [];
    var output="";
    document.getElementById("map_canvas").innerHTML = "";
for (var i = 0; i < coords.length; i++) {
        if (i%20==0)
        {
            var coord = coords[i].split(",");
            output += coord[0]+","+coord[1]+" ";
        }
}
document.getElementById("map_canvas").innerHTML = output;

我读过一些建议我将其转换为 JSON,我不确定是否需要这样做。有没有办法将文件作为对象加载,而不是编写纯文本处理程序?


我时间紧迫,所以我这样做了:

var outputobject = 'var paths = {';
    for (property in copypaths) {
        outputobject += property + ': { ';
        outputobject += "name: '" + copypaths[property].name+"',";
        outputobject += "colour: '"+ copypaths[property].colour+"',";

        var reducedoutput="";
        var coord = copypaths[property].coordinates.split(" ");
        for (var i = 0; i < coord.length; i++) {
            if (i%20==0)
            {
                var coords = coord[i].split(",");
                reducedoutput += coords[0]+","+coords[1]+" ";
            }
        }   
        outputobject += "coordinates: '"+ reducedoutput+"'},";
    }
    outputobject += "};";
    document.getElementById("reduced").innerHTML = outputobject;

它仍然涉及复制/粘贴和删除最后一个。 谢谢@Oleg V. Volkov,当我本周晚些时候有更多时间时,我会看看你提出的方法。

最佳答案

只需剥离领先的 JavaScript,这样您就可以使用裸键获得几乎正确的 JSON 并使用 JSON/JSON::PPallow_barekey 设置为 true 值的实例来解码结果字符串。

关于javascript - 如何在 Perl 中打开 javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11829430/

相关文章:

javascript - html字符串中的removeAttr

Perl透明代理

perl - 如何使用 shell I/O 重定向将参数传递到 Perl 脚本中?

json - 使用 Azure Devops 部署 Azure 策略 ARM 模板失败

ios - 使用返回的 JSON 值设置 NSString

php - 通过 JSON 将数据从 android 发送到服务器

perl - 当一个参数错误地将另一个参数作为其值时,perl 中的多个命令行参数

javascript - AngularJS 选择/ng-选项

javascript - 防止在 AngularJS 中达到一定长度后从文本框中删除字符串

javascript - 在 Vue 组件中导入 Helper 类