如何使json输出

时间:2016-02-16 08:08:17

标签: json perl

我想使用下面的代码生成json输出。

但是我无法生成json输出

下面是我的代码,但没有工作

=============================================== ====================

"L"
    "LL"
        <nil>,<nil>
    ,"t"
        "LR"
            <nil>,<nil>
        ,"R"
            <nil>,<nil>

=============================================== ====================

输入文件在

之下
$row2 = mysqli_fetch_assoc(mysqli_query($conn,"SELECT * FROM login WHERE username='{$row['user']}'"));

=============================================== ====================

OUTPUT想要如下所示

import yagmail
yag = yagmail.SMTP(username, password)
yag.send("toaddr@gmail.com", "this subject", "text content")

2 个答案:

答案 0 :(得分:2)

首先。你的程序几乎可以工作你只需要在正则表达式上使用g修饰符:

stackApply

($poolname, $devconfig, $unablegbs, $freegbs, $usedgbs, $full, $comp) = m/ (\S+)/g; 之后的,移除为有效的JSON。

您的计划可以做一些改进。我建议

  1. 使用JSON包创建JSON。
  2. 使用perl内联语法,而不是调用$compcat。 Perl支持你可以用awk做的一切。如果您继续使用外部呼叫,请使用cat abuse停止。

答案 1 :(得分:0)

我对这个问题有两个答案:

  • 使用JSON模块汇编JSON。它不那么痛苦。
  • 这看起来像Symmetrix CLI输出。设置-output XML,您将获得机器可读输出。 XML不是JSON,但它实际上更容易从一个转换为另一个而不是手动解析。

尽管如此回答你提出的问题:

#!/usr/bin/env perl
use strict;
use warnings;
use JSON; 

my @header = qw ( name flags raid usable_gb free_gb used_gb full_perc comp_perc ); 

my $stuff;

while ( <DATA> ) {
    my %this_row; 
    if ( m/RAID/ ) {
        my @fields = split; 
        @this_row{@header} = @fields; 
        push ( @$stuff, \%this_row ); 
    }
}

print to_json ( $stuff, { pretty => 1 } );

__DATA__    
Symmetrix ID: 000000000000

                   S Y M M E T R I X   P O O L S
---------------------------------------------------------------------------
Pool         Flags  Dev              Usable       Free       Used Full Comp
Name         PTECSL Config              GBs        GBs        GBs  (%)  (%)
------------ ------ ------------ ---------- ---------- ---------- ---- ----
SAS600_R1    TFFDEI RAID-5(3+1)     78725.1    160.3    64.8   94    0
SAS600_R2    TFFDEI RAID-4(3+1)     725.1    120.3    666.8   83    0
SAS600_R3    TFFDEI RAID-3(3+1)     7825.1    1260.3    6564.8   34    0
SAS600_R4    TFFDEI RAID-2(3+1)     7875.1    160.3    664.8   4    0
SAS600_R5    TFFDEI RAID-1(3+1)     872.1    1210.3    6564.8  1     0

  Total                            ---------- ---------- ---------- ---- ---    -
  GBs                                 78725.1    12160.3    66564.8   84    0

Legend:
  (P)ool Type:
    S = Snap,  R = Rdfa DSE  T = Thin
  (T)echnology:
    S = SATA, F = Fibre Channel, E = Enterprise Flash Drive, M = Mixed, - =     N/A
  Dev (E)mulation:
    F = FBA, A = AS400, 8 = CKD3380, 9 = CKD3390, - = N/A
  (C)ompression:
    E = Enabled, D = Disabled, N = Enabling, S = Disabling, - = N/A
  (S)tate:
    E = Enabled, D = Disabled, B = Balancing
  Disk (L)ocation:
    I = Internal, X = External, M = Mixed, - = N/A`

输出:

[
   {
      "full_perc" : "94",
      "flags" : "TFFDEI",
      "comp_perc" : "0",
      "name" : "SAS600_R1",
      "used_gb" : "64.8",
      "free_gb" : "160.3",
      "usable_gb" : "78725.1",
      "raid" : "RAID-5(3+1)"
   },
   {
      "flags" : "TFFDEI",
      "comp_perc" : "0",
      "name" : "SAS600_R2",
      "full_perc" : "83",
      "usable_gb" : "725.1",
      "raid" : "RAID-4(3+1)",
      "used_gb" : "666.8",
      "free_gb" : "120.3"
   },
   {
      "usable_gb" : "7825.1",
      "raid" : "RAID-3(3+1)",
      "free_gb" : "1260.3",
      "used_gb" : "6564.8",
      "name" : "SAS600_R3",
      "flags" : "TFFDEI",
      "comp_perc" : "0",
      "full_perc" : "34"
   },
   {
      "free_gb" : "160.3",
      "used_gb" : "664.8",
      "raid" : "RAID-2(3+1)",
      "usable_gb" : "7875.1",
      "full_perc" : "4",
      "name" : "SAS600_R4",
      "comp_perc" : "0",
      "flags" : "TFFDEI"
   },
   {
      "usable_gb" : "872.1",
      "raid" : "RAID-1(3+1)",
      "used_gb" : "6564.8",
      "free_gb" : "1210.3",
      "flags" : "TFFDEI",
      "comp_perc" : "0",
      "name" : "SAS600_R5",
      "full_perc" : "1"
   }
]