日: 2024年3月30日

  • Shell でjsonの配列の変数から value を抜き出す

    Shell でjsonの配列の変数から value を抜き出す

    キーが固定の場合

    以下は、シェルスクリプトでJSONデータを読み込み、jqコマンドを使用して同様の処理を行う例です。

    #!/bin/bash
    
    json='[{"name":"Worker","no":"123"}, {"name":"User","no":"456"}, {"name":"Organization","no":"789"}, {"name": "Position","no":"123"}, {"name": "PositionTranslation","no":"123"}]'
    
    echo "$json" | jq -c '.[]' | while read -r item; do
      name=$(echo "$item" | jq -r '.name')
      no=$(echo "$item" | jq -r '.no')
      
      echo "$name"
      echo "$no"
      echo "-----"
    done

    このスクリプトでは:

    1. json変数にJSONデータを文字列として格納します。
    2. echo "$json" | jq -c '.[]'を使用して、JSONデータをパイプでjqコマンドに渡し、各オブジェクトを個別の行に分割します。
    3. while read -r itemを使用して、各オブジェクトを1つずつ読み込みます。
    4. echo "$item" | jq -r '.name'echo "$item" | jq -r '.no'を使用して、各オブジェクトからnamenoの値を抽出します。
    5. 抽出した値とセパレーターを表示します。

    結果はこちらです

    Worker
    123
    -----
    User
    456
    -----
    Organization
    789
    -----
    Position
    123
    -----
    PositionTranslation
    123
    -----
    
    

    キーが固定でない場合(接頭辞が共通の場合)

    JSONデータのキーが一部共通している場合、jqコマンドの to_entriesselectmapを組み合わせて目的の値を取得することができます。以下は、public_ip で始まるキーに対応する値を取得する例です。

    #!/bin/bash
    
    json='{"public_ip01": "1.2.3.4", "public_ip02": "2.3.4.5", "public_ip03": "12.2.3.4"}'
    
    echo "$json" | jq -r 'to_entries | map(select(.key | startswith("public_ip")).value)'
    

    このスクリプトでは:

    1. json 変数にJSONデータを文字列として格納します。
    2. echo "$json" | jq -r 'to_entries | map(select(.key | startswith("public_ip")).value)' を使用して、JSONデータを jq コマンドに渡し、以下の処理を行います:
      • to_entries で、JSONオブジェクトをキーと値のペアの配列に変換します。
      • map(select(.key | startswith("public_ip"))) で、キーが "public_ip" で始まるエントリーのみを選択します。
      • .value で、選択されたエントリーの値のみを取得します。
    3. jq の出力は、選択された値の配列になります。

    このスクリプトを実行すると、以下のような結果が得られます

    "1.2.3.4" "2.3.4.5" "12.2.3.4"

    これにより、public_ip で始まるキーに対応する値が取得できました。必要に応じて、この出力を変数に格納したり、ループ処理で個別に処理したりすることができます。

  • ゲームのセリフで学ぶ:「Character into Question」

    ゲームのセリフで学ぶ:「Character into Question」

    この記事を読んで学べること:

    • ゲームのセリフから、人物の評判を問題にする表現を学ぶ。
    • 法的な文脈でのキャラクターの疑問を表す英語表現を理解する。

    今回の表現: “Several other acts have also been brought to my attention that call the defendant’s character into question.”

    日本語訳: 被告の人物像に疑問を投げかける他の行為も私の知るところとなっている。

    文法解析:

    • “Several other acts” は「いくつかの他の行為」という意味の名詞句です。
    • “Have also been brought to my attention” は受動態の完了形で、「私の注意を引いた」という意味です。
    • “That call the defendant’s character into question” は関係代名詞 “that” を使った節で、被告の人物像に疑問を投げかける行為を指します。

    他の表現との違い:

    オリジナルの表現似た表現使い方の違い例文
    Several other acts have also been brought to my attention that call the defendant’s character into question.Other actions have come to light that cast doubt on the defendant’s integrity.“Call into question” は疑問を投げかけることを示し、”cast doubt on” は信頼性に疑いを持たせることを意味します。Other actions have come to light that cast doubt on the defendant’s integrity.

    英語学習者として覚えておくべきポイント: 「Call into question」は、ある事柄が疑わしいとされるときに使われるフレーズです。法的文脈では、証拠や証言がある人物の評判や信頼性に疑いを投げかける場合によく使われます。この表現は、訴訟や評議などの正式な場で特に力を持ちます。