You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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";

关键说明

  1. 读取完整文件:do { local $/; <$fh> }会临时取消Perl的输入记录分隔符$/,让<$fh>一次性读取整个文件的全部内容,确保传给decode_json的是完整合法的JSON字符串。
  2. 匹配数据结构:根据你提供的JSON结构,需要逐层访问嵌套节点才能获取目标数据,而非访问不存在的items数组。

内容的提问来源于stack exchange,提问作者user21928156

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 03:55:37