gpt4 book ai didi

json - 使用perl解析json文件

转载 作者:行者123 更新时间:2023-12-04 16:20:22 25 4
gpt4 key购买 nike

我正在尝试用 perl 解析一个 json 文件。我想提取键“名称”及其对应的值。
我的文件看起来像这样

{
"data":[
{
"name":"ABC",
"id":"123",
},
{
"name":"PQR",
"id":"456",
},
{
"name":"XYZ",
"id":"789",
}
]
}

我正在尝试使用以下代码:
#/usr/lib/perl
use lib qw( ..);
use LWP::Simple;
use JSON;
my $filename = '/file.txt';
my $data;
if (open (my $json_str, $filename))
{
local $/ = undef;
my $json = JSON->new;
$data = $json->decode(<$json_str>);
close($json_stream);
}
print $data->{name};

但我没有得到任何输出。

谁能告诉我出了什么问题?

最佳答案

您的 json 文件无效。

第 5、10、15 行不应以逗号结尾,因为这是这些散列的最后一个键/值对。

修复此问题后,这里是您的代码版本,可为您提供预期结果:

#/usr/lib/perl
use strict;
use warnings;

use lib qw(..);

use JSON qw( );

my $filename = 'file.txt';

my $json_text = do {
open(my $json_fh, "<:encoding(UTF-8)", $filename)
or die("Can't open \$filename\": $!\n");
local $/;
<$json_fh>
};

my $json = JSON->new;
my $data = $json->decode($json_text);

for ( @{$data->{data}} ) {
print $_->{name}."\n";
}

一些问题:
  • 您正在使用 $json_stream$json_str .您打算使用 $json_stream在所有地方表示文件句柄
  • $data->{name}应该应用于 .json 文件中数组的所有成员,而不是 json 本身。所以你需要先遍历它们

  • 调试时,请确保您的 json 有效。要么通过 jsonlint.comjson_xs JSON::XS 附带的实用程序来自 cpan。

    JSON 可以描述复杂的数据结构,因此当您将其解析为 Perl 时,您也会得到一个复杂的数据结构。首先尝试使用 Data::Dumper 查看数据结构或 Data::PrinterData::TreeDumper

    关于json - 使用perl解析json文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653419/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com