テキストファイルをJSONに

テキストファイルをJSONに

IP:PORT次のテキストファイルがあります。

1.1.1.1:1919
2.2.2.2:111
1.1.1.1:987

JSON形式のスクリプトでこれを使用する必要があります。

async def main(loop):
    servers = [{
        "address": "ip",
        "port": port
    }, {
        "address": "ip",
        "port": port
    }]

出力が必要です。

async def main(loop):
    servers = [{
        "address": "1.1.1.1",
        "port": 1919
    }, {
        "address": "2.2.2.2,
        "port": 111
    }, {
        "address": "1.1.1.1,
        "port": 987
    }]

私はLinuxを使用しています。

答え1

jq -nRr '
    [ inputs | split(":") | {address: first, port: last} ]
    | "async def main(loop):\n    servers = \(.)"
' addresses

出力

async def main(loop):
    servers = [{"address":"1.1.1.1","port":"1919"},{"address":"2.2.2.2","port":"111"},{"address":"1.1.1.1","port":"987"}]

答え2

使用幸せ(以前のPerl_6)

raku -MJSON::Fast -e 'my @a.=push(.split: ":") for lines; say to-json( ( %("address", .[0], "port", .[1].Int) for @a), :sorted-keys );'  

入力例:

1.1.1.1:1919
2.2.2.2:111
1.1.1.1:987

出力例:

    [
      {
        "address" : "1.1.1.1",
        "port" : 1919
      },
      {
        "address" : "1.1.1.1",
        "port" : 987
      },
      {
        "address" : "2.2.2.2",
        "port" : 111
      }
    ]

メモ:見やすく印刷されていない出力は、次の設定で取得できますpretty => False

~$ raku -MJSON::Fast -e 'my @a.=push(.split: ":") for lines; say to-json( ( %("address", .[0], "port", .[1].Int) for @a), pretty => False );'  file
[{"address":"1.1.1.1","port":1919},{"port":111,"address":"2.2.2.2"},{"port":987,"address":"1.1.1.1"}]

Rakuエコシステムの他の関連モジュールにはJSON::Tiny、、、JSON::PrettyおよびがありますJSON::Pretty::Sorted

https://raku.land/cpan:TIMOTIMO/JSON::クイック
https://raku.org

関連情報