使用Perl JSON模块解析文件报错,请求技术排查
问题分析与解决
核心问题1:JSON读取不完整
报错提示解析到第3个字符就终止,原因是decode_json(<$fh>)中,<$fh>在标量上下文下只会读取文件的第一行,而你的JSON是多行结构,实际仅传入了{开头的片段,自然无法完成解析。
核心问题2:数据访问路径不匹配
代码里试图访问$json_data->{items},但你提供的JSON文件中根本不存在items这个顶级键,实际结构是glossary -> GlossDiv -> GlossList -> GlossEntry的嵌套层级。
修正后的代码
use JSON; # 打开JSON文件 my $json_file = 'example_json.json'; open(my $fh, '<', $json_file) or die "无法打开文件 '$json_file' $!"; # 一次性读取完整文件内容(临时取消输入记录分隔符) my $json_content = do { local $/; <$fh> }; # 解析完整的JSON字符串 my $json_data = decode_json($json_content); # 匹配实际JSON结构访问数据 my $gloss_entry = $json_data->{glossary}->{GlossDiv}->{GlossList}->{GlossEntry}; print "ID: $gloss_entry->{ID}\n"; print "术语: $gloss_entry->{GlossTerm}\n"; print "缩写: $gloss_entry->{Acronym}\n";
关键说明
- 读取完整文件:
do { local $/; <$fh> }会临时取消Perl的输入记录分隔符$/,让<$fh>一次性读取整个文件的全部内容,确保传给decode_json的是完整合法的JSON字符串。 - 匹配数据结构:根据你提供的JSON结构,需要逐层访问嵌套节点才能获取目标数据,而非访问不存在的
items数组。
内容的提问来源于stack exchange,提问作者user21928156
相关产品推荐
相关产品推荐

