【问题标题】:perl remove " in string and return a word from jsonperl 删除字符串中的 " 并从 json 中返回一个单词
【发布时间】:2013-01-23 13:02:25
【问题描述】:

我有这个字符串:
'{"file_type":"/video/2012/09/10/prn-exceo.jpg"}'
我想要:
'{file_type:/video/2012/09/10/prn-exceo.jpg}'
试过了:
$str=~m/\"(.+)\"/$str=~ s/"//g;
我做错了什么?

更新
一个 json 调用给了我这个字符串:
'{"file_type":"/video/2012/09/10/prn-exceo.jpg"}'
我想像这样返回prn-exceo.jpg
my $json = JSON->new->allow_nonref->encode('prn-exceo.jpg');

但我有一个parsererror

【问题讨论】:

  • 这是 JSON 吗? JSON 解析器是否更适合您的基本需求?
  • 你说得对,是杰森。现在我有一个 parsererror,因为我试图像这样my $json = JSON->new->allow_nonref->encode('prn-exceo.jpg'); 返回'prn-exceo.jpg`。感谢任何帮助
  • 我认为您使用不正确,也许编辑您的问题以询问您在做什么以及如何做的问题。这是一个经典的 XY 问题。当您的问题实际上是 Y 时,您正在寻求有关 X 的帮助。请告诉我们 Y :-)
  • 更新了我的问题,谢谢

标签: regex json perl


【解决方案1】:

你没有做错任何事。替换做你想做的事。

david@elgin ~ $ cat x.pl
use strict;
use warnings;
use v5.14;

my $str = '{"file_type":"/video/2012/09/10/prn-exceo.jpg"}';
$str=~ s/"//g;
say $str;
~ :
david@elgin ~ $ perl x.pl
{file_type:/video/2012/09/10/prn-exceo.jpg}

【讨论】:

    【解决方案2】:

    另一种方法是使用tr 运算符:

    $str =~ tr/"//d;
    

    【讨论】:

      【解决方案3】:

      在我看来,您使用 JSON 非常不正确。让我看看我是否理解正确,您从某个外部源获取包含 JSON 的字符串,然后您想从 file_type 键中获取值。在这种情况下,您想要解码 JSON 字符串,而不是对其进行编码。

      #!/usr/bin/env perl
      
      use strict;
      use warnings;
      
      use JSON;
      
      my $json_string = '{"file_type":"/video/2012/09/10/prn-exceo.jpg"}';
      
      my $data = JSON->new->decode($json_string);
      my $file = $data->{file_type};
      
      print $file . "\n";
      
      # if you just want the filename then use 
      
      use File::Basename;
      
      my $filename = fileparse $file;
      
      print $filename . "\n";
      

      【讨论】:

        猜你喜欢
        • 2021-04-30
        • 2017-07-17
        • 2018-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 1970-01-01
        • 2012-03-27
        相关资源
        最近更新 更多