回答編集履歴

1

ソース添付

2016/03/28 06:09

投稿

退会済みユーザー
test CHANGED
@@ -3,3 +3,97 @@
3
3
  そのご、Algorithm::Diff を使用して比較
4
4
 
5
5
  差分のCSVを JSONに変換
6
+
7
+
8
+
9
+
10
+
11
+ ```perl
12
+
13
+ use Algorithm::Diff qw(diff);
14
+
15
+ use Data::Dumper;
16
+
17
+ use JSON;
18
+
19
+
20
+
21
+ my $json_A = '[{"id" : "1", "name" : "one", "age" : "18", "sex" : "m"}, {"id" : "2", "name" : "two", "age" : "20", "sex" : "f"}, {"id" : "6", "name" : "six", "age" : "5", "sex" : "f"}]';
22
+
23
+ my $data_A = decode_json($json_A);
24
+
25
+ my @line_A = ();
26
+
27
+ foreach my $item ( @$data_A ){
28
+
29
+ my @csv = ( $$item{'id'}, $$item{'name'}, $$item{'age'}, $$item{'sex'});
30
+
31
+ push @line_A, join( ',', @csv);
32
+
33
+ }
34
+
35
+
36
+
37
+ my $json_B = '[{"id" : "2", "name" : "two", "age" : "20"}, {"id" : "1", "name" : "one", "age" : "18", "sex" : "m"}, {"id" : "3", "name" : "three", "age" : "60", "sex" : "m"}]';
38
+
39
+ my $data_B = decode_json($json_B);
40
+
41
+ my @line_B = ();
42
+
43
+ foreach my $item ( @$data_B ){
44
+
45
+ my @csv = ( $$item{'id'}, $$item{'name'}, $$item{'age'}, $$item{'sex'});
46
+
47
+ push @line_B, join( ',', @csv);
48
+
49
+ }
50
+
51
+
52
+
53
+ @sort_line_A = sort {$a <=> $b} @line_A;
54
+
55
+ @sort_line_B = sort {$a <=> $b} @line_B;
56
+
57
+
58
+
59
+ @diffs = diff( \@sort_line_A, \@sort_line_B );
60
+
61
+
62
+
63
+ @out_json = ();
64
+
65
+ for my $dline ( @diffs ) {
66
+
67
+ for my $d ( @$dline ) {
68
+
69
+ if ( $d->[0] eq "+" ){
70
+
71
+ #print $d->[0] . "\t" . $d->[2] . "--\n";
72
+
73
+ my @jdata = split( ',', $d->[2]);
74
+
75
+ my %item = ();
76
+
77
+ $item{'id'} = @jdata[0] if ( @jdata[0] );
78
+
79
+ $item{'name'} = @jdata[1] if ( @jdata[1] );
80
+
81
+ $item{'age'} = @jdata[2] if ( @jdata[2] );
82
+
83
+ $item{'sex'} = @jdata[3] if ( @jdata[3] );
84
+
85
+ push @out_json, \%item;
86
+
87
+
88
+
89
+ }
90
+
91
+ }
92
+
93
+ }
94
+
95
+ print encode_json( \@out_json ) . "\n";
96
+
97
+
98
+
99
+ ```