用Python将Perl模块转换为JSON

2024-06-12 11:32:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Perl(.pm)文件,我一直试图将其放入JSON表示中,以便在其中搜索关键字。在

我的脚本的目录是/Devices/bin/script.py.pm文件所在的目录位于上一级,因此/Devices/Devices.PM。^{5>和包含静态数据的cdies一样:

mylist = (
    blah => {
        other       =9,
        houses       => 1,
        etc => [
            {   etc   => '5',
                ppl      => '3,
                things       => "etc",
                animals => [ 'blah-228', 'blah-229' ]
            },
            {   etc   => '9',
                ppl      => '5',
                things       => "22",
                animals => [ 'blah-2', 'blah-5' ]
            },
        ],
        partner => 'ets',
        location => 'wherever',
    },
    blah => {
        ppl => 6,
        place => 101,
        things => 'etc',
        animals => 'whatever',
    },

我有:

^{pr2}$

但我一直得到TypeError: <open file 'SwitchConfig.pm', mode 'w' at 0x10c1f69c0> is not JSON serializable。我已经尝试了好几种方法,但没有运气,包括json.dump(s)。我总是犯不同的错误。我是否没有正确理解我的.pm文件结构,以便将其转换为JSON表示?在


Tags: 文件目录脚本jsonbinetcscript关键字
2条回答

^{}从Python对象(如{"foo": True})转换为将该对象表示为JSON的字符串(如'{"foo": true}')。您似乎正在尝试另一种方法,将包含JSON的文件转换为Python对象;执行此操作的函数是^{}。但是,这仍然行不通,因为Devices.pm不包含JSON。您需要编写一个Perl脚本来导入Devices.pm,然后将其内容转储为实际的JSON,或者用Python编写一个Perl解析器。我推荐第一种方法。在

似乎您需要使用Perl脚本(或一个行程序)来阅读本文,然后导出正确的JSON。在

首先,显示的内容不是有效的Perl。我将假设一些基本的语法错误的错误。在

mylist前面还有一个丢失的%;在Perl中,变量名以sigil开头,%表示哈希。我会假设这是一个遗漏张贴,但它在那里。如果没有,你就得解决这个问题。在

然后让我使用一个文件data.pm,例如

%mylist = ( 
    blah => { 
        other  => 9, 
        houses => 1,
        etc    => [ { etc => '5', ppl => '3' }, { etc => '9', ppl => '5' } ]
    }
);

这是一个简短的已发布数据示例,其中修复了一些拼写错误。在

下面是一个Perl脚本,可以从中生成JSON。它使用do将文件作为脚本执行,从而将数据结构(哈希)读入程序。然后JSON::PP 模块用于从中生成JSON,因为它应该安装在使用Perl的系统上。在

^{pr2}$

整个工作是在前两行完成的。JSON::PP是一个核心模块(since v5.14),但如果外部依赖不是问题,请使用JSON,如果安装了fastJSON::XS,则使用它。在

这很好地符合一个班轮

perl -MJSON::PP -wE'say encode_json { do "./data.pm" }' > data.json

其中输出被重定向到文件。在

程序和一行程序输出(为了可读性而换行)

{"blah":{"other":"9","houses":"1","etc":
    [{"ppl":"3","etc":"5"},{"ppl":"5","etc":"9"}]}}

写入的文件data.json的内容是什么。在

为此,.pm文件必须只包含一个有效的Perl数据结构。如果变量多于一个散列值,这将不起作用,因为do不会返回所有这些数据。那你就得用其他方法处理文件了。在

相关问题 更多 >