2013-01-12 21 views
5

Tôi không thể sử dụng giao diện OO của JSON::XS đúng cách. Các croaks sau với một lỗi tôi không thể theo dõi:JSON :: XS "Cách sử dụng" croak

use JSON::XS; 
my $array = ['foo', 'bar']; 

my $coder = JSON::XS->new->utf8->pretty; 
print $coder->encode_json($array); 

này croaks như sau: Usage: JSON::XS::encode_json(scalar) at test.pl line 5. Tôi đã được chải qua mã cho JSON::XS và tôi không thể tìm thấy một "Cách sử dụng:" cảnh báo bất cứ nơi nào. Việc sử dụng của tôi dường như được kết hợp khá tốt với các ví dụ trong tài liệu. Bất cứ ai có thể cho tôi biết nơi tôi đã đi sai?

Trả lời

10

JSON::XS có hai giao diện: chức năng và OO.

  • Trong giao diện chức năng, tên hàm là encode_json.
  • Trong giao diện OO, phương pháp chỉ đơn giản là encode, không phải encode_json.

Cả hai hai đoạn sau làm việc:

# Functional     | # OO 
------------------------------+----------------------------------------- 
           | 
use JSON::XS;     | use JSON::XS; 
my $array = ['foo', 'bar']; | my $array = [ 'foo', 'bar' ]; 
           | 
print encode_json($array); | my $coder = JSON::XS->new->utf8->pretty; 
           | print $coder->encode($array); 
           | 
# ["foo","bar"]    | # [ 
           | # "foo", 
           | # "bar" 
           | # ] 
+0

Phiên bản OO là nhầm lẫn giữa '@ array' và' $ array' (và gán một tham chiếu mảng '@ array') – Borodin

+0

@Borodin : Vâng phát hiện ... cố định – Zaid

+0

Cảm ơn bạn đã trả lời câu hỏi này! Tôi tự hỏi tại sao tác giả không chỉ sử dụng một tên phương thức và kiểm tra xem đối số đầu tiên có phải là tham chiếu JSON :: XS hay không ... –

Các vấn đề liên quan