텍스트 파일을 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
    }]

저는 리눅스를 사용하고 있습니다.

답변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

관련 정보