2011-11-22 69 views
6

Tôi gặp sự cố khi phân tích cú pháp đối tượng json với perl và tôi không biết vấn đề có xuất phát từ json hay tập lệnh của tôi hay không. Đây là json:chuỗi JSON không đúng định dạng, không phải mảng, đối tượng, số, chuỗi hoặc nguyên tử

test.json

{ 
    "count":3, 
    "entries": 
    [ 
     { 
     "id":85, 
     "application":AuditExampleLogin1, 
     "user":admin, 
     "time":"2011-11-22T10:29:37.422Z", 
     "values": 
null 
     }, 
     { 
     "id":87, 
     "application":AuditExampleLogin1, 
     "user":admin, 
     "time":"2011-11-22T10:30:56.235Z", 
     "values": 
null 
     }, 
     { 
     "id":89, 
     "application":AuditExampleLogin1, 
     "user":admin, 
     "time":"2011-11-22T10:33:15.000Z", 
     "values": 
null 
     } 
    ] 
} 

đây kịch bản:
script.pl

#!/usr/bin/perl -w 
use strict; 
use JSON; 
open FILE, 'test.json' or die "Could not open file inputfile: $!"; 
sysread(FILE, my $result, -s FILE); 
close FILE or die "Could not close file: $!"; 
my @json = @{decode_json($result)}; 

Và cuối cùng là lỗi tôi nhận được:
lỗi

malformed JSON string, neither array, object, number, string or atom, 
at character offset 86 (before "AuditExampleLogin1,\n...") at  
./script.pl line 7. 

Hỏi: Ai đó có thể cho tôi biết sự cố xảy ra từ json hoặc tập lệnh của tôi và điều gì sẽ thay đổi trong cả hai trường hợp?

FYI số json is coming from Alfresco auditing api.

+3

AFAIK đó là không hợp lệ JSON, thiếu dấu ngoặc kép quanh các giá trị. – Mat

+0

Tôi đã xử lý chính xác cùng một vấn đề. Tôi có một câu hỏi cho tác giả chủ đề: làm thế nào để bạn truy cập các biến @json? Tôi tiếp tục nhận được rằng @ json là một HASH trong bộ nhớ nhưng tôi không thể truy cập các biến hoặc vòng máng nó. –

Trả lời

2

Nó hoạt động nếu Kiểm tra ... và giá trị quản trị được trích dẫn. Dòng

my @json = @{decode_json($result)}; 

cần phải được chỉ

my @json = decode_json($result); 
+0

thực sự nó hoạt động khi các giá trị 'application' và' user' được trích dẫn. Có cách nào để nói 'perl' là một chút lỏng lẻo trên phân tích cú pháp của JSON và chấp nhận chuỗi không được kiểm soát? (điều đó sẽ giúp tôi không phải viết lại json). – Max

+1

Không chắc chắn, tác giả mô-đun JSON coi việc kiểm tra chặt chẽ là một tính năng bảo mật. Bạn có thể poke tại mã, JSON :: PP là một phiên bản perl tinh khiết. –

+5

Bạn đang yêu cầu trình phân tích cú pháp JSON phân tích thành công dữ liệu không phải là JSON hợp lệ. Bằng cách đó nằm điên rồ, chắc chắn :) –

10

này:

"application":AuditExampleLogin1, 

... không hợp lệ JSON. AuditExampleLogin1 không phải là mảng, đối tượng, số, chuỗi hoặc nguyên tử. Tôi không biết nó được cho là gì, vì vậy tôi không thể nói cho bạn biết phải thay đổi nó thành cái gì.

Nếu đó là một chuỗi, thì bạn cần phải đính kèm nó trong ".

Xem thêm: JSON Lint.

+0

rất tiện dụng mà json validtor. cảm ơn – Max

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