- 论坛徽章:
- 46
|
回复 6# david_95
写这个的时候或许作者还不知道 JSON 语法不完全符合,要不能节省你很多生命。写个简单情况能工作的- use strict;
- use warnings;
- use Data::Dumper;
- my @stack = {};
- while (<>) {
- #删除空白
- s/^\s*//;
- s/[\s,]*$//;
- next if $_ eq '';
- if ($_ eq '{') {
- push @stack, {};
- } elsif ($_ eq '[') {
- push @stack, [];
- } elsif ($_ eq '}' or $_ eq ']') {
- if (ref $stack[-2]) { #上一级是数组
- push @{$stack[-2]}, $stack[-1];
- pop @stack;
- } else { #上一级是哈希时栈中还保存了key, ref 字符串返回 false
- $stack[-3]->{$stack[-2]} = $stack[-1];
- pop @stack;
- pop @stack;
- }
- } elsif (/(\w+)\s*:\s*"?(.*?)"?$/) {
- if ($2 eq '{') {
- push @stack, $1, {};
- } elsif ($2 eq '[') {
- push @stack, $1, [];
- } else {
- $stack[-1]->{$1} = $2;
- }
- } else {
- die "line: $. '$_'";
- }
- }
- die "unmatch bracket." if @stack != 1;
- $Data::Dumper::Indent = 1;
- print Dumper $stack[0];
复制代码 |
评分
-
查看全部评分
|