【问题标题】:How can I convert a Perl array to a JavaScript array using JSON? [duplicate]如何使用 JSON 将 Perl 数组转换为 JavaScript 数组? [复制]
【发布时间】:2014-04-26 10:15:09
【问题描述】:

我正在尝试制作一个网页,显示有关 netapp 文件管理器使用情况的图表。

我从以下列方式存储的文件中读取数据

Name   usedSpace   available_space    kbytes       quota_volume   capacity
Juno   889347800   1795006760         2684354560   1698693120     33%

这是我的 Perl 代码

use CGI;
use Time::Local;
use List::MoreUtils qw(uniq);
use GD;
use GD::Graph::bars;
use GD::Graph::lines; 
use GD::Graph::area;

open (MYFILE, 'my_data.csv');

@filesystem_name = ();
@my_date = ();
@my_used = ();
@my_avail = ();
@my_kbytes = ();
@my_quota_volume = ();
@my_capacity = ();

#read all the data and store fields into arrays
while (<MYFILE>) {
    if(/$user_selected_filer/) {
    ($dummy,$current_line_date,$dummy,$dummy,$dummy,$dummy,$dummy) =  split (/,/, $_);     
    if(($current_line_timestamp ge $start && $current_line_timestamp le $end)){

            ($name,$date_after,$used,$avail, $kbytes, $quota_volume, $capacity) = split  (/,/, $_);
            ($month_after,$day_of_month_after,$year_after) = split ('/', $date_after);
            push (@filesystem_name,$name);
            push (@my_used,$used/1000000);
            push (@my_avail,$avail/1000000);
            push (@my_kbytes,$kbytes/1000000);
            push (@my_quota_volume,$quota_volume/1000000);
            push (@my_capacity,$capacity);
            push (@my_date_after, $month_after . "/" . $day_of_month_after . "/" . $year_after);
            $count++;
    }
    }

}

只要我使用 GD 图,这些数组就可以很好地使用 Perl 制作图。但我想在需要 JavaScript 数组的网页上制作这些图表。

我对这整个 JSON 有点迷失了。

【问题讨论】:

  • 您是否打算使用图表库在 JavaScript 中生成图表?如果有,是哪一个?我确信它们都需要不同格式的输入数据;在制作 JSON 之前,您应该知道要使用什么格式。
  • 我想做使用 JavaScript 的谷歌图表。这是它的链接developers.google.com/chart/interactive/docs/gallery/linechart
  • 看,投票关闭,因为此脚本对您的输入数据没有任何作用。脚本在, 处拆分,您的数据是 分隔的(或空格?)所以不要说它有用...为什么不显示 1.) 您的真实输入,2.) WANTED 输出 3 .) 你真正的实际尝试?!
  • 数据以逗号分隔。
  • @user3353628 jm666 的意思是您在问题中包含的数据不是用逗号分隔。无论如何,frido 在您之前的问题中给出了将数组哈希转换为 JSON 的good example。您的 JavaScript 代码需要对 Perl 脚本进行 AJAX 调用以获取 JSON 数据。然后,您必须将其转换为数组数组,这是 Google Charts 所期望的。对于多个 Stack Overflow 问题来说,这些材料已经足够了,所以我建议一次只做一个步骤,如果遇到困难,请提出一个更窄的问题。

标签: javascript json perl


【解决方案1】:

我不确定您的问题是什么,但这些想法可能会有所帮助

JSON 数据是 JavaScript 对象和数组的语言独立限制。

JSON 是一种使用简单字符串表示数据结构的方式。

由于散列和数组的思想很常见,因此可以使用 JSON 在不同语言和不同平台之间移动信息。

从您的问题中不清楚您要移动哪些数据以及移动到哪里。但是您可以使用 JSON 模块的 encode_json 方法从 Perl 创建一个 JSON 字符串,这将为您提供一个可以通过任何方式发送到任何地方的字符串。

相应地,您可以使用JSON.parse 构建一个反映原始 Perl 数据的 JavaScript 对象。

【讨论】:

    【解决方案2】:

    因为不知道自己真正想要什么,这里有一个网友:

    perl -MJSON::XS -MText::CSV::Slurp -E 'say JSON::XS->new->utf8->encode(Text::CSV::Slurp->load(filehandle => *STDIN))' < file.csv
    

    根据这些数据:

    Name,usedSpace,available_space,kbytes,quota_volume,capacity
    Juno,889347800,1795006760,2684354560,1698693120,33%
    Juno2,89347800,795006760,684354560,698693120,3%
    Juno3,9347800,95006760,84354560,98693120,1%
    

    创建这个:

    [{"usedSpace":"889347800","quota_volume":"1698693120","kbytes":"2684354560","available_space":"1795006760","capacity":"33%","Name":"Juno"},{"usedSpace":"89347800","quota_volume":"698693120","kbytes":"684354560","available_space":"795006760","capacity":"3%","Name":"Juno2"},{"usedSpace":"9347800","quota_volume":"98693120","kbytes":"84354560","available_space":"95006760","capacity":"1%","Name":"Juno3"}]
    

    或者更漂亮,这个:

    perl -MJSON::XS -MText::CSV::Slurp -E 'say JSON::XS->new->utf8->pretty->encode(Text::CSV::Slurp->load(filehandle => *STDIN))' < file.csv
    

    创建:

    [
       {
          "usedSpace" : "889347800",
          "quota_volume" : "1698693120",
          "kbytes" : "2684354560",
          "available_space" : "1795006760",
          "capacity" : "33%",
          "Name" : "Juno"
       },
       {
          "usedSpace" : "89347800",
          "quota_volume" : "698693120",
          "kbytes" : "684354560",
          "available_space" : "795006760",
          "capacity" : "3%",
          "Name" : "Juno2"
       },
       {
          "usedSpace" : "9347800",
          "quota_volume" : "98693120",
          "kbytes" : "84354560",
          "available_space" : "95006760",
          "capacity" : "1%",
          "Name" : "Juno3"
       }
    ]
    

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 2019-04-10
      • 2022-12-03
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多