如何在perl中将字符串转换为json

时间:2011-12-28 11:45:00

标签: json perl

我是perl的新手所以请在下面帮助我

我有一个perl脚本来执行telnet命令。此脚本从服务器接收响应字符串。实际上服务器创建一个json字符串,然后它发送到客户端程序,但客户端程序显示为string

问题:如何将此字符串转换为json并从此json字符串中读取数据。

我的json字符串结构类似于以下

[{"success":"21","data":[{"name":"tester","lastname":"project"}]}]

以下是我尝试将其转换为json的最后一行

@lines = $telnet->waitfor('/$/');
my @json;
@json = @{decode_json(@lines)};

打印输出如下

HASH(0x1af068c)

提前致谢!!!

2 个答案:

答案 0 :(得分:4)

这是转换JSON的代码段。修改以捕获错误。

use strict;
use warnings;
use JSON::XS;
use Try::Tiny;
use Data::Dumper::Concise;

my $data = qq<[{"success":"21","data":[{"name":"tester","lastname":"project"}]}]>;

my $decoded;

try {
    $decoded = JSON::XS::decode_json($data);
}
catch {
    warn "Caught JSON::XS decode error: $_";
};

print Dumper $decoded;

答案 1 :(得分:3)

我认为有一个更简单的方法:

import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.JButton;
public class MAIN
{
    public static void main(String args[])
    {
        ActionClass actionEvent = new ActionClass();

        //Main window
        JFrame Program1 = new JFrame("Program1");
        Program1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Program1.setPreferredSize(new Dimension(800, 600));
        Program1.pack();
        Program1.setVisible(true);

        //menu button (returns to home Menu)
        JButton MN = new JButton("MENU");
        MN.setBounds(300, 10, 200, 20);
        MN.setVisible(false);
        Program1.add (MN);
        //MN.setActionCommand("1");

        // Enter GRC
        JButton GR = new JButton("GRC");
        GR.setBounds(300, 40, 200, 20);
        GR.setVisible(true);
        Program1.add (GR);
        //GR.setActionCommand("2");

        GR.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent GRH)
            {
                MN.setVisible(true);
                GR.setVisible(false);
            }
        }
        );

        MN.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent MNH)
            {
                MN.setVisible(false);
                GR.setVisible(true);
            }
        }
        );

    }
}