main.pl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use strict;
  2. use warnings;
  3. use JSON;
  4. sub process_json_data {
  5. my ($tags, $file_path) = @_;
  6. my $filename = $file_path; # json 文件的路径
  7. my $json_text = do {
  8. open(my $json_fh, "<", $filename)
  9. or die("Can't open $filename: $!\n");
  10. local $/;
  11. <$json_fh>
  12. };
  13. my $json = decode_json($json_text);
  14. my $target = $json->{'data'};
  15. my @list = map { s/^\s+|\s+$//g; $_ } split( /,/, $tags );
  16. for my $item (@list) {
  17. my ($namespace, $key) = split(/:/, $item);
  18. for my $element (@$target) {
  19. # 如果$namespace与'namespace'字段相同,则进行替换
  20. if ($element->{'namespace'} eq $namespace) {
  21. my $name = $element->{'frontMatters'}->{'name'};
  22. $item =~ s/$namespace/$name/;
  23. my $data = $element->{'data'};
  24. # 如果在'data'字段中存在$key,则进行替换
  25. if (exists $data->{$key}) {
  26. my $value = $data->{$key}->{'name'};
  27. $item =~ s/$key/$value/;
  28. }
  29. last;
  30. }
  31. }
  32. }
  33. return @list;
  34. }
  35. my $tags = "artist:gentsuki, female:ponytail, female:schoolgirl uniform, other:no penetration";
  36. my $file_path = "ETagConverter/db.text.json";
  37. my @result = process_json_data($tags, $file_path);
  38. print join(", ", @result), "\n";
  39. # 输出 "艺术家:2"