<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      jq工具的使用

      jq 命令行行為的完整規(guī)則

      命令格式行為示例結(jié)果
      jq (無(wú)任何參數(shù)) 顯示幫助信息 jq 顯示幫助文檔
      jq <選項(xiàng)> (無(wú)過濾器) 顯示幫助信息 jq -c
      jq -n
      顯示幫助文檔
      jq <過濾器> 阻塞等待輸入 jq '.'
      jq 'map(.id)'
      等待 STDIN
      jq <選項(xiàng)> <過濾器> 取決于選項(xiàng):
      - 普通選項(xiàng):等待輸入
      -n:不等待
      jq -c '.' → 等待
      jq -n '.' → 立即執(zhí)行
       
      jq <過濾器> 文件 立即處理文件 jq '.' data.json 處理文件內(nèi)容
      jq <選項(xiàng)> <過濾器> 文件 立即處理文件 jq -c '.' data.json 處理文件內(nèi)容

      1. 只有選項(xiàng) → 顯示幫助

      $ jq -c
      jq - commandline JSON processor [version 1.6]
      Usage: jq [options] <jq filter> [file...]
      ...
      # 立即顯示幫助文檔,不阻塞

      2. 只有過濾器 → 阻塞等待

      $ jq '.name'
      (光標(biāo)閃爍,程序掛起等待輸入)
      # 需要按 Ctrl+D 結(jié)束輸入或 Ctrl+C 終止

      3. 過濾器 + -n → 立即執(zhí)行

      $ jq -n '.name'
      null  # 立即輸出結(jié)果(因?yàn)闆]有輸入)

      4. 過濾器 + 文件 → 立即處理

      $ jq '.name' data.json
      "Alice"  # 立即從文件處理

      為什么這個(gè)區(qū)別很重要?

      在實(shí)際腳本編寫中:

      #!/bin/bash
      
      # 危險(xiǎn):會(huì)阻塞腳本執(zhí)行!
      result=$(jq '.data')
      
      # 安全:立即生成數(shù)據(jù)
      result=$(jq -n '{time: now}')
      
      # 安全:從變量讀取
      json='{"value": 42}'
      result=$(jq '.value' <<< "$json")

      基本操作:

      jq [options] <jq filter> [file...]

      [options] - 可選選項(xiàng)

      • -r:原始輸出模式

      • -c:緊湊輸出

      • -n:無(wú)輸入模式

       <jq filter> - 必填過濾器

      :用單引號(hào)包裹的表達(dá)式 '...'

      • '.':恒等過濾器

      • '.name':字段選擇器

      • 'map(.id)':數(shù)組處理

      [file...] - 可選輸入文件

      • 格式:文件路徑(一個(gè)或多個(gè))

        • data.json:?jiǎn)蝹€(gè)文件

        • file1.json file2.json:多個(gè)文件

       

      輸入jq .后阻塞,然后我鍵盤輸入a,報(bào)parse error: invalid numeric literal at line2,column 0,為啥報(bào)這個(gè)錯(cuò)誤

      • jq 進(jìn)入等待輸入狀態(tài)(因?yàn)闆]有使用 -n 選項(xiàng)且沒有提供文件)

      • 光標(biāo)在終端閃爍,等待您輸入 JSON 數(shù)據(jù)

      jq 要求輸入必須是有效的 JSON,而 a 不是合法的 JSON。有效的 JSON 值必須是:

      • 字符串:"a"(必須用雙引號(hào)包裹)

      • 數(shù)字:123

      • 布爾值:true 或 false

      • 對(duì)象:{"key": "value"}

      • 數(shù)組:[1, 2, 3]

      • null:null

      雖然您輸入的是字母,但 jq 的解析器是這樣工作的:

      1. 首先嘗試解析為數(shù)字(因?yàn)閿?shù)字是 JSON 的基本類型)

      2. 當(dāng)看到 a 時(shí),它可能期待類似 0xA 的十六進(jìn)制數(shù)字

      3. 發(fā)現(xiàn)后面沒有有效數(shù)字字符時(shí)拋出錯(cuò)誤

       

       

      1. JSON 格式要求 jq 要求輸入必須是有效的 JSON,而 a 不是合法的 JSON。有效的 JSON 值必須是: 字符串:"a"(必須用雙引號(hào)包裹) 數(shù)字:123 布爾值:true 或 false 對(duì)象:{"key": "value"} 數(shù)組:[1, 2, 3] null:null 不對(duì)吧,json不是key,value么,只輸入上面的值也不是json啊?

      真正的JSON格式要求:

      1. 頂層必須是以下之一:

        • 對(duì)象(用 {} 包裹)

        • 數(shù)組(用 [] 包裹)

      2. 值類型:

        • 字符串:必須雙引號(hào)包裹 "text"

        • 數(shù)字:整數(shù)或浮點(diǎn)數(shù) 423.14

        • 布爾值:true 或 false

        • 空值:null

        • 對(duì)象:{"key": "value"}

        • 數(shù)組:[1, 2, 3]

       

      然JSON標(biāo)準(zhǔn)要求頂層必須是對(duì)象或數(shù)組,但jq對(duì)輸入的處理更靈活:

      1. jq接受任何有效的JSON值作為輸入,包括:

        • 簡(jiǎn)單值:"string"42truenull

        • 復(fù)合值:{...}[...]

      2. 這是jq的特性,不是JSON標(biāo)準(zhǔn)的特性:

        # 這些在jq中都是有效的輸入
        echo '"text"' | jq .  # 字符串
        echo '42' | jq .      # 數(shù)字
        echo 'true' | jq .    # 布爾值

      為什么jq允許簡(jiǎn)單值?

      這是jq設(shè)計(jì)者的選擇:

      1. 實(shí)用主義:很多場(chǎng)景只需要處理簡(jiǎn)單值

      2. 管道友好:便于在命令行中處理各種數(shù)據(jù)

      3. 符合腳本需求:例如 jq -n '1 + 1' 直接計(jì)算

      標(biāo)準(zhǔn)JSON vs jq輸入對(duì)比

      類型標(biāo)準(zhǔn)JSON是否有效jq是否接受作為輸入
      {"key": "value"} ? ?
      ["a", "b"] ? ?
      "string" ?(頂層無(wú)效) ?
      42 ?(頂層無(wú)效) ?
      true ?(頂層無(wú)效) ?
      null ?(頂層無(wú)效) ?
      a ? ?

       

      json的key必須是字符串,value是上面幾種數(shù)據(jù)類型?

      JSON 格式的完整規(guī)范

      1. 頂層結(jié)構(gòu):

        • 必須是對(duì)象({})或數(shù)組([]

        • 不能是簡(jiǎn)單值(字符串、數(shù)字、布爾值或 null)

      2. 鍵(Key)要求:

        • 必須是字符串

        • 必須用雙引號(hào)包裹

        • 不能是數(shù)字、布爾值或其他類型

        // 正確
        {"name": "Alice"}
        
        // 錯(cuò)誤 - 鍵未加引號(hào)
        {name: "Alice"}
        
        // 錯(cuò)誤 - 鍵是數(shù)字
        {42: "answer"}
      3. 值(Value)類型:

        類型示例說(shuō)明
        字符串 "text" 必須雙引號(hào)包裹
        數(shù)字 423.14 整數(shù)或浮點(diǎn)數(shù)
        布爾值 truefalse 必須小寫
        數(shù)組 [1, "two", true] 有序值集合
        對(duì)象 {"key": "value"} 鍵值對(duì)集合
        null null 表示空值

      雖然標(biāo)準(zhǔn) JSON 要求頂層必須是對(duì)象或數(shù)組,但 jq 放寬了這個(gè)限制:

      1. jq 接受簡(jiǎn)單值作為輸入:

        # 這些在 jq 中有效但不符合 JSON 標(biāo)準(zhǔn)
        echo '"text"' | jq .  # 字符串
        echo '42' | jq .      # 數(shù)字
        echo 'true' | jq .    # 布爾值
      2. 但鍵仍然必須遵循 JSON 規(guī)范:

        # 嘗試使用無(wú)效鍵
        echo '{name: "Alice"}' | jq .
        # 報(bào)錯(cuò):parse error: Invalid numeric literal at line 1
        
        # 正確寫法
        echo '{"name": "Alice"}' | jq .

      # 查看特定主機(jī)的 facts

      ansible 172.17.79.16 -i hosts -m setup -o 2>/dev/null | awk-F '=> ''{print $2}'| jq .

       

      或者ansible 172.17.79.16 -i hosts -m setup -o 2>/dev/null | tr -d "172.17.79.16 | success => "| less

      1. 對(duì)于數(shù)組:使用索引訪問 .[0].[1]

      2. 對(duì)于對(duì)象:使用鍵名訪問 .["key"] 或 .key

      3. keys 函數(shù)適用于兩種結(jié)構(gòu):

        • 數(shù)組 → 返回索引

        • 對(duì)象 → 返回鍵名

      4. 組合使用管道 | 可以構(gòu)建復(fù)雜查詢

      這兩種訪問方式是 jq 處理 JSON 的核心功能,掌握它們就能高效提取和轉(zhuǎn)換 JSON 數(shù)據(jù)

       

       the simplest filter is .,which is the identity filter

      在jq工具中,.(點(diǎn)號(hào))是最簡(jiǎn)單的過濾器,稱為"identity filter"(恒等過濾器)。它的作用是將輸入的JSON數(shù)據(jù)原樣輸出,僅對(duì)格式進(jìn)行標(biāo)準(zhǔn)化處理(如美化縮進(jìn))

      identity?(恒等)這一術(shù)語(yǔ)源自數(shù)學(xué)和計(jì)算機(jī)科學(xué)中的概念,指代一種不改變輸入數(shù)據(jù)的操作,詞根"ident"源于拉丁語(yǔ)"idem"(相同)48,后綴"-ity"表示性質(zhì)或狀態(tài),組合后表示"同一性"或"不變性",如同身份證(identity card)唯一對(duì)應(yīng)個(gè)人身份,區(qū)別于動(dòng)詞"identify"(識(shí)別)的動(dòng)態(tài)過程,此處強(qiáng)調(diào)靜態(tài)的"同一性"

       

      例1:

       

      jq '.[0] | keys' array_of_objects.json

      array_of_objects.json 內(nèi)容:

      [
        {"id": 1, "name": "Alice", "active": true},
        {"id": 2, "email": "bob@example.com"},
        {"role": "admin", "permissions": ["read", "write"]}
      ]

      1. .[0] 獲取數(shù)組的第一個(gè)元素 {"id":1,"name":"Alice","active":true}

      2. keys 提取這個(gè)對(duì)象的所有鍵名(按字母排序)

        

      例2:.[]在數(shù)組和字典(對(duì)象)中的展開不同

      對(duì)象的展開:
      a.json的內(nèi)容如下:
      { "id": 1, "name": "Alice", "roles": ["admin", "user"] }
       
      命令jq '.[] | keys' a.json:
      '.[]' a.json 展開的字典的value
      結(jié)果:
      1
      Alice
      ["admin", "user"]


      {"user": {"name": "Alice", "age": 30}, "server": {"ip": "1.1.1.1"}}
      jq '.[] | keys' file.json

      輸出:

      ["age","name"]
      ["ip"]




      數(shù)組的展開:
      假設(shè)你的 file.json:

      [
      {
      "id": 1,
      "name": "Alice",
      "roles": ["admin", "user"]
      },
      {
      "id": 2,
      "name": "Bob",
      "email": "bob@example.com"
      },
      {
      "company": "Tech Inc",
      "country": "USA"
      }
      ]

      1. .[]:展開數(shù)組中的所有元素

        {"id":1,"name":"Alice","roles":["admin","user"]}
        {"id":2,"name":"Bob","email":"bob@example.com"}
        {"company":"Tech Inc","country":"USA"}
      2. | keys:對(duì)每個(gè)展開的對(duì)象獲取鍵名

        ["id","name","roles"]
        ["id","name","email"]
        ["company","country"]
      最終輸出:

      [
      "id",
      "name",
      "roles"
      ]
      [
      "id",
      "name",
      "email"
      ]
      [
      "company",
      "country"
      ]

      .[] - 數(shù)組展開運(yùn)算符

      • 作用:將數(shù)組拆分為獨(dú)立的元素

      • 輸入:[元素1, 元素2, ...]

      • 輸出:元素1 元素2  ...(多個(gè)獨(dú)立 JSON 對(duì)象)

      • 如果輸入是對(duì)象:{"a":1, "b":2} → 輸出值 1 2

      
      

        

      jq '.object.nested_array[].property' file.json

      .object # 第一層:訪問根對(duì)象的 "object" 屬性
      .nested_array # 第二層:訪問 object 對(duì)象的 "nested_array" 屬性
      [] # 解包操作:將 nested_array 數(shù)組展開為多個(gè)元素
      .property # 第三層:訪問每個(gè)數(shù)組元素的 "property" 屬性

       

      假設(shè)你的 file.json 內(nèi)容
      {
        "object": {
          "nested_array": [
            {
              "id": 1,
              "property": "value1",
              "details": {"sub": "a"}
            },
            {
              "id": 2,
              "property": "value2",
              "details": {"sub": "b"}
            }
          ],
          "other_field": "ignored"
        },
        "unrelated": "data"
      }    
      

        

      運(yùn)行命令:

      jq '.object.nested_array[].property' file.json

      輸出:

      "value1"
      "value2"

      關(guān)鍵概念解釋

        1. . (根選擇器)

          • 起始點(diǎn),表示整個(gè) JSON 文檔的根

          • 類似文件系統(tǒng)的 / 根目錄

        2. .object (屬性訪問)

          • 訪問根對(duì)象的 object 屬性

          • 等價(jià)于 JavaScript 的 data.object

        3. .nested_array (嵌套訪問)

          • 訪問 object 對(duì)象的 nested_array 屬性

          • 類似 data.object.nested_array

        4. [] (數(shù)組迭代器)

          • 最關(guān)鍵的操作符:將數(shù)組展開為獨(dú)立的元素

          • 輸入:[ {...}, {...} ]
            輸出:{...} 和 {...}(兩個(gè)獨(dú)立對(duì)象)

        5. .property (葉節(jié)點(diǎn)訪問)

          • 從每個(gè)展開的數(shù)組元素中提取 property 值

          • 對(duì)每個(gè)元素執(zhí)行:element.property

      類比其他語(yǔ)言

      jq 表達(dá)式JavaScript 等價(jià)Python 等價(jià)
      .object data.object data['object']
      .nested_array[] data.object.nested_array.forEach(...) for item in data['object']['nested_array']:
      .property item.property item['property']



      # 查看特定主機(jī)的 facts

      ansible 172.17.79.16 -i hosts -m setup -o 2>/dev/null | awk-F '=> ''{print $2}'| jq .

      或者ansible 172.17.79.16 -i hosts -m setup -o 2>/dev/null | tr -d "172.17.79.16 | success => "| less

      如果ansible輸出的不是單行(比如沒有使用`-o`選項(xiàng)),那么上述命令可能會(huì)失敗,因?yàn)閍nsible默認(rèn)輸出的JSON是帶縮進(jìn)的多行格式,
      而awk是按行處理的,這樣每行都會(huì)被分割,導(dǎo)致輸出多行內(nèi)容給jq,而jq期望輸入是一個(gè)完整的JSON文檔。
        1. ansible ... -o
          -o 參數(shù)使輸出為單行(關(guān)鍵!)

           
          172.17.79.16 | SUCCESS => {JSON數(shù)據(jù)}
        2. awk -F'=> ' '{print $2}'
          以 "=> " 為分隔符,提取第二部分(純JSON)

        3. jq .
          美化輸出 JSON



      shell中的數(shù)組arr=(a b c d)
      echo ${a[0]}

      declare -A arr1=([0]=a [1]=b [2]=c [3]=d)
      echo ${b[0]}
      結(jié)果一樣,有啥區(qū)別,難道普通數(shù)組可以看作關(guān)聯(lián)數(shù)組的特殊數(shù)組?

      是的,索引數(shù)組可以看作關(guān)聯(lián)數(shù)組的特殊形式(鍵為連續(xù)整數(shù)),但在 Shell 實(shí)現(xiàn)中它們是不同的數(shù)據(jù)結(jié)構(gòu):

      • 索引數(shù)組:為順序訪問優(yōu)化的數(shù)組

      • 關(guān)聯(lián)數(shù)組:通用的鍵值存儲(chǔ)

      在您的例子中,當(dāng)使用連續(xù)整數(shù)作為關(guān)聯(lián)數(shù)組的鍵時(shí),行為確實(shí)類似于索引數(shù)組,但底層實(shí)現(xiàn)和特性仍有差異。


      因X.Y和X["Y"]都行,所以
      ansible 172.17.69.16 -i hosts -m setup --key-file=./ssh/id_rsa -o 2>/dev/null | \
      awk -F "=> " '{print $2}'|jq '.ansible_facts.ansible_nodename'
      等價(jià)于
      ansible 172.17.69.16 -i hosts -m setup --key-file=./ssh/id_rsa -o 2>/dev/null | \
      awk -F "=> " '{print $2}'|jq '.["ansible_facts"]["ansible_nodename"]'
      .是文本對(duì)象

      查看ansible_facts所有key
      ansible 172.17.69.16 -i hosts -m setup --key-file=./ssh/id_rsa -o 2>/dev/null | \
      awk -F "=> " '{print $2}'|jq '.[]'

      ansible 172.17.69.16 -i hosts -m setup --key-file=./ssh/id_rsa -o 2>/dev/null | \
      awk -F "=> " '{print $2}'|jq '.ansible_facts|keys'


       

      posted @ 2025-07-09 15:37  _java_python  閱讀(68)  評(píng)論(0)    收藏  舉報(bào)
             [00:00.000] 作詞 : 陳信榮
          [00:01.000] 作曲 : 周傳雄
          [00:02.000] 編曲 : 周傳雄
          [00:03.000] 制作人 : 周傳雄
          [00:29.259]過完整個(gè)夏天
          [00:34.742]憂傷并沒有好一些
          [00:41.185]開車行駛在公路無(wú)際無(wú)邊
          [00:47.320]有離開自己的感覺
          [00:52.453]
          [00:53.347]唱不完一首歌
          [00:59.370]疲倦還剩下黑眼圈
          [01:05.596]感情的世界傷害在所難免
          [01:11.703]黃昏再美終要黑夜
          [01:18.292]依然記得從你口中說(shuō)出再見堅(jiān)決如鐵
          [01:24.732]昏暗中有種烈日灼身的錯(cuò)覺
          [01:30.171]黃昏的地平線
          [01:33.230]劃出一句離別
          [01:36.313]愛情進(jìn)入永夜
          [01:42.165]
          [01:42.881]依然記得從你眼中滑落的淚傷心欲絕
          [01:49.290]混亂中有種熱淚燒傷的錯(cuò)覺
          [01:54.774]黃昏的地平線
          [01:57.816]割斷幸福喜悅
          [02:00.915]相愛已經(jīng)幻滅
          [02:07.171]
          [02:19.647]唱不完一首歌
          [02:25.497]疲倦還剩下黑眼圈
          [02:31.753]感情的世界傷害在所難免
          [02:37.881]黃昏再美終要黑夜
          [02:42.994]
          [02:44.363]依然記得從你口中說(shuō)出再見堅(jiān)決如鐵
          [02:50.872]昏暗中有種烈日灼身的錯(cuò)覺
          [02:56.291]黃昏的地平線
          [02:59.393]劃出一句離別
          [03:02.507]愛情進(jìn)入永夜
          [03:08.340]
          [03:09.205]依然記得從你眼中滑落的淚傷心欲絕
          [03:15.531]混亂中有種熱淚燒傷的錯(cuò)覺
          [03:20.937]黃昏的地平線
          [03:23.991]割斷幸福喜悅
          [03:27.025]相愛已經(jīng)幻滅
          [03:34.375]
          [03:58.563]依然記得從你口中說(shuō)出再見堅(jiān)決如鐵
          [04:04.694]昏暗中有種烈日灼身的錯(cuò)覺
          [04:10.141]黃昏的地平線
          [04:13.156]劃出一句離別
          [04:16.228]愛情進(jìn)入永夜
          [04:21.297]
          [04:22.863]依然記得從你眼中滑落的淚傷心欲絕
          [04:29.401]混亂中有種熱淚燒傷的錯(cuò)覺
          [04:34.714]黃昏的地平線
          [04:37.774]割斷幸福喜悅
          [04:40.913]相愛已經(jīng)幻滅
          [05:39.200] 配唱制作人 : 吳佳明
          [05:39.533] 鋼琴 : 周傳雄
          [05:39.866] 吉他 : 許華強(qiáng)
          [05:40.199] 鼓 : Gary?Gideon
          [05:40.532] 貝斯 : Andy?Peterson
          [05:40.865] 弦樂編寫 : 吳慶隆
          [05:41.198] 弦樂 : 孔朝暉/顧文麗/隋晶晶/梁中樞/尹淑占/王言/關(guān)旗
          [05:41.531] 和聲編寫 : 周傳雄
          [05:41.864] 和聲 : 周傳雄
          [05:42.197] 錄音師 : 林世龍/沈文釧/Geoffrey Lee
          [05:42.530] 混音師 : 王晉溢
          [05:42.863] 錄音室 : 強(qiáng)力/HASAYAKE/Atomic?&?Audioplex?(Singapore)
          [05:43.196] 混音室 : 白金
          [05:43.529] OP : Sony/ATV?Music?Publishing?Taiwan/哈薩雅琪有限公司
          [05:43.862] SP : Sony/ATV?Music?Publishing?Taiwan?
      
          
           
          
           
      主站蜘蛛池模板: 亚洲午夜激情久久加勒比| 国产精品无码不卡在线播放| 国产成人无码A区在线观看视频 | 国产亚洲精品第一综合麻豆 | 92国产精品午夜福利免费| 国产精品天天看天天狠| gogogo高清在线观看视频中文| 欧美成人午夜在线观看视频| 亚洲一区二区三区| 99久久er这里只有精品18| 国产高潮又爽又刺激的视频| 九九热在线精品免费视频| 国厂精品114福利电影免费| 动漫AV纯肉无码AV电影网| 国产精品久久久一区二区| 亚洲熟妇精品一区二区| 色一情一区二区三区四区| 国产国拍精品av在线观看| 精品国产一区AV天美传媒| 中文字幕在线国产精品| 成人精品网一区二区三区| 这里只有精品在线播放| 国产69精品久久久久乱码免费| 九九热视频在线精品18| 中文字幕av一区二区三区人妻少妇 | 又大又黄又粗高潮免费| 国产成人亚洲日韩欧美| 无码无需播放器av网站| 欧美日韩精品一区二区三区不卡| 安仁县| 亚洲精品国产美女久久久| 亚洲欧美中文日韩V日本| 午夜福利片1000无码免费| 国产亚洲精品黑人粗大精选| 人人澡人人透人人爽| 亚洲av成人网在线观看| 一卡二卡三卡四卡视频区| 欧美激情一区二区三区在线| 精品 无码 国产观看| 日韩 欧美 亚洲 一区二区| 国产欧美精品一区二区三区-老狼|