main.pl 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. use strict;
  2. use warnings;
  3. use JSON;
  4. sub process_json_data {
  5. my ($list, $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. for my $item (@$list) {
  16. my ($namespace, $key) = split(/:/, $item);
  17. for my $element (@$target) {
  18. # 如果$namespace与'namespace'字段相同,则进行替换
  19. if ($element->{'namespace'} eq $namespace) {
  20. my $name = $element->{'frontMatters'}->{'name'};
  21. $item =~ s/$namespace/$name/;
  22. my $data = $element->{'data'};
  23. # 如果在'data'字段中存在$key,则进行替换
  24. if (exists $data->{$key}) {
  25. my $value = $data->{$key}->{'name'};
  26. $item =~ s/$key/$value/;
  27. }
  28. last;
  29. }
  30. }
  31. }
  32. return $list;
  33. }
  34. my @list = ("artist:gentsuki", "female:ponytail","female:schoolgirl uniform", "other:no penetration");
  35. my $file_path = "ETagCN/db.text.json";
  36. my $result = process_json_data(\@list, $file_path);
  37. print join(",", @$result), "\n";
  38. # 输出 "艺术家:2"