2013-03-19 94 views
-4

我有我的字符串如下,我想删除第一个{没有任何东西只有第一个是字符串的开始。字符串在替换之前打印得很好,但在替换空字符串之后。Perl字符串替换?

use strict; 
use warnings; 

my $string = {"something":[{"some":"12","some":"something","data":"","data":"data2","age":"23"},{......},{.....}]} 

# the string is valid as it is json from some array function. 

print $string."\n"; #My string prints fine here 
$string = s/\{//; 

print "String after replacement".".$string." testing"; 
+4

从技术上讲,在这种情况下'$ string'是一个散列引用,而不是一个字符串。 – redbmk 2013-03-19 22:07:41

+2

这不是你的原始代码,因为这段代码不能编译。 '$ string'赋值是一个未加引号的json字符串,最后一个'print'语句包含5个引号。除了您遇到问题的确切代码之外,不要发布任何内容。 – TLP 2013-03-19 22:22:01

回答

5

而不是试图手动与JSON一塌糊涂,我强烈建议你使用现有的,测试,调试JSON模块中的JSON读取,修改数据结构,并将其写回。

请参阅JSON为一个模块,将为您做。

+2

还有https://metacpan.org/module/JSON::XS,我想它比'JSON'更快# – 2013-03-19 22:08:05

+1

'JSON :: XS'也比'JSON'更好地处理utf-8 – redbmk 2013-03-19 22:09:15

2

替换:

$string = s/\{//; 

有:

$string =~ s/\{//; 
+0

哦,我花了一半一个小时计算出昨天...;) – kjprice 2013-03-19 22:06:46

+0

谢谢,它的工作。我想要这个简单的答案。 – mysteriousboy 2013-03-19 22:12:16

1

正如线程之前所述,另一种方法是使用JSON::XS模块,这将是 比JSON,而且像redbmk说更快,它更好地处理UTF-8。

+0

来自'JSON'文档:*此模块默认尝试使用'JSON :: XS',并失败,请使用'JSON :: PP'代替。所以它的功能完全依赖于'JSON :: XS'或'JSON :: PP'。* – 2013-03-20 04:25:27