循环使用jq for JSON的数组(在命令行上)

时间:2016-02-28 00:39:11

标签: iteration jq

我有一个数组:

[
    {
        "AssetId": 14462955,
        "Name": "Cultural Item",
        "Description": "It\u0027s... you know... an item. People love items!!!",
        "AbsoluteUrl": "http://www.roblox.com/Cultural-Item-item?id=14462955",
        "PriceInRobux": "300",
        "PriceInTickets": "",
        "Updated": "3 years ago",
        "Favorited": "370 times",
        "Sales": "55",
        "Remaining": "",
        "Creator": "ROBLOX",
        "CreatorAbsoluteUrl": "http://www.roblox.com/users/1/profile",
        "PrivateSales": "3 Private Sellers",
        "PriceView": 1,
        "BestPrice": "666,666,666",
        "ContentRatingTypeID": 0,
        "IsServerSideThumbnailLookupInCatalogEnabled": true,
        "IsLargeItem": false,
        "IsThumbnailFinal": true,
        "IsThumbnailUnapproved": false,
        "ThumbnailUrl": "http://t3.rbxcdn.com/cfbab57cabc6090d078c5f7af403caaa",
        "BcOverlayUrl": null,
        "LimitedOverlayUrl": "http://images.rbxcdn.com/793dc1fd7562307165231ca2b960b19a.png",
        "DeadlineOverlayUrl": null,
        "LimitedAltText": "Limited",
        "NewOverlayUrl": null,
        "SaleOverlayUrl": null,
        "IosOverlayUrl": null,
        "XboxOverlayUrl": null,
        "IsTransparentBackground": false,
        "AssetTypeID": 8,
        "CreatorID": 1,
        "CreatedDate": "\/Date(1250206710313)\/",
        "UpdatedDate": "\/Date(1340756728887)\/",
        "IsForSale": true,
        "IsPublicDomain": false,
        "IsLimited": true,
        "IsLimitedUnique": false,
        "MinimumMembershipLevel": 0
    },
    {
        "AssetId": 114385498,
        "Name": "Redspybot",
        "Description": "How could something so conspicuous be a spy?  Beats me! This item was awarded to users who redeemed a ROBLOX card from F.Y.E. in May 2013.",
        "AbsoluteUrl": "http://www.roblox.com/Redspybot-item?id=114385498",
        "PriceInRobux": "",
        "PriceInTickets": "",
        "Updated": "2 years ago",
        "Favorited": "218 times",
        "Sales": "0",
        "Remaining": "",
        "Creator": "ROBLOX",
        "CreatorAbsoluteUrl": "http://www.roblox.com/users/1/profile",
        "PrivateSales": "2 Private Sellers",
        "PriceView": 1,
        "BestPrice": "862,133,799",
        "ContentRatingTypeID": 0,
        "IsServerSideThumbnailLookupInCatalogEnabled": true,
        "IsLargeItem": false,
        "IsThumbnailFinal": true,
        "IsThumbnailUnapproved": false,
        "ThumbnailUrl": "http://t3.rbxcdn.com/173f5636efac35199e40740b3839b3d3",
        "BcOverlayUrl": null,
        "LimitedOverlayUrl": "http://images.rbxcdn.com/793dc1fd7562307165231ca2b960b19a.png",
        "DeadlineOverlayUrl": null,
        "LimitedAltText": "Limited",
        "NewOverlayUrl": null,
        "SaleOverlayUrl": null,
        "IosOverlayUrl": null,
        "XboxOverlayUrl": null,
        "IsTransparentBackground": false,
        "AssetTypeID": 8,
        "CreatorID": 1,
        "CreatedDate": "\/Date(1367270100170)\/",
        "UpdatedDate": "\/Date(1370113730937)\/",
        "IsForSale": false,
        "IsPublicDomain": false,
        "IsLimited": true,
        "IsLimitedUnique": false,
        "MinimumMembershipLevel": 0
    },
    {
        "AssetId": 29715011,
        "Name": "American Cowboy",
        "Description": "...or Cowgirl! You know how to rope in some lookieloos to your America place. Yee haw!  Rating prize for the July 4, 2010 Building Contest.",
        "AbsoluteUrl": "http://www.roblox.com/American-Cowboy-item?id=29715011",
        "PriceInRobux": "",
        "PriceInTickets": "",
        "Updated": "3 years ago",
        "Favorited": "507 times",
        "Sales": "0",
        "Remaining": "",
        "Creator": "ROBLOX",
        "CreatorAbsoluteUrl": "http://www.roblox.com/users/1/profile",
        "PrivateSales": "3 Private Sellers",
        "PriceView": 1,
        "BestPrice": "950,000,000",
        "ContentRatingTypeID": 0,
        "IsServerSideThumbnailLookupInCatalogEnabled": true,
        "IsLargeItem": false,
        "IsThumbnailFinal": true,
        "IsThumbnailUnapproved": false,
        "ThumbnailUrl": "http://t2.rbxcdn.com/972ae5b4376523dcfdfdcd16c1cef90d",
        "BcOverlayUrl": null,
        "LimitedOverlayUrl": "http://images.rbxcdn.com/793dc1fd7562307165231ca2b960b19a.png",
        "DeadlineOverlayUrl": null,
        "LimitedAltText": "Limited",
        "NewOverlayUrl": null,
        "SaleOverlayUrl": null,
        "IosOverlayUrl": null,
        "XboxOverlayUrl": null,
        "IsTransparentBackground": false,
        "AssetTypeID": 8,
        "CreatorID": 1,
        "CreatedDate": "\/Date(1277767354190)\/",
        "UpdatedDate": "\/Date(1277769099607)\/",
        "IsForSale": false,
        "IsPublicDomain": false,
        "IsLimited": true,
        "IsLimitedUnique": false,
        "MinimumMembershipLevel": 0
    },
    {
        "AssetId": 98253651,
        "Name": "Mahem\u0026#39;s ROBLOX Tablet",
        "Description": "Winner: Mahem. ROBLOX will be in touch to redeem this prize. Void if sold, traded, or deleted.",
        "AbsoluteUrl": "http://www.roblox.com/Mahems-ROBLOX-Tablet-item?id=98253651",
        "PriceInRobux": "90,000",
        "PriceInTickets": "",
        "Updated": "3 years ago",
        "Favorited": "429 times",
        "Sales": "1",
        "Remaining": "0",
        "Creator": "ROBLOX",
        "CreatorAbsoluteUrl": "http://www.roblox.com/users/1/profile",
        "PrivateSales": "1 Private Sellers",
        "PriceView": 1,
        "BestPrice": "999,999,999",
        "ContentRatingTypeID": 0,
        "IsServerSideThumbnailLookupInCatalogEnabled": true,
        "IsLargeItem": false,
        "IsThumbnailFinal": true,
        "IsThumbnailUnapproved": false,
        "ThumbnailUrl": "http://t7.rbxcdn.com/1dc64223edd569ea698191c86c124928",
        "BcOverlayUrl": "http://images.rbxcdn.com/4fc3a98692c7ea4d17207f1630885f68.png",
        "LimitedOverlayUrl": "http://images.rbxcdn.com/d649b9c54a08dcfa76131d123e7d8acc.png",
        "DeadlineOverlayUrl": null,
        "LimitedAltText": "Limited Unique",
        "NewOverlayUrl": null,
        "SaleOverlayUrl": null,
        "IosOverlayUrl": null,
        "XboxOverlayUrl": null,
        "IsTransparentBackground": false,
        "AssetTypeID": 19,
        "CreatorID": 1,
        "CreatedDate": "\/Date(1353368761747)\/",
        "UpdatedDate": "\/Date(1355363144050)\/",
        "IsForSale": true,
        "IsPublicDomain": false,
        "IsLimited": false,
        "IsLimitedUnique": true,
        "MinimumMembershipLevel": 1
    }
]

我想遍历此数组中的每个对象,并选择每个名为AssetIdconsole.log()的键的值。 我如何使用jq作为命令行?

4 个答案:

答案 0 :(得分:28)

命令行工具jq写入STDOUT和/或STDERR。如果要将.AssetId信息写入STDOUT,则有一种可能性如下:

jq -r ".[] | .AssetId" input.json

输出:

14462955
114385498
29715011
98253651

更强大的咒语是.[] | .AssetId?,但如果没有名为" AssetId"

的键,您的选择将取决于您想要的内容。

答案 1 :(得分:3)

您也可以通过此命令执行此操作。

jq ".[].AssetId" input.json

如果数组就像我的情况那样

{  
   "resultCode":0,
   "resultMsg":"SUCCESS",
   "uniqueRefNo":"111222333",
   "list":[  
      {  
         "cardType":"CREDIT CARD",
         "isBusinessCard":"N",
         "memberName":"Bank A",
         "memberNo":10,
         "prefixNo":404591
      },
      {  
         "cardType":"DEBIT CARD",
         "isBusinessCard":"N",
         "memberName":"Bank A",
         "memberNo":10,
         "prefixNo":407814
      },
      {  
         "cardType":"CREDIT CARD",
         "isBusinessCard":"N",
         "memberName":"Bank A",
         "memberNo":10,
         "prefixNo":413226
      }
   ]
}

您可以使用以下jq命令获取prefixNo。

jq ".list[].prefixNo" input.json

有关在jq上迭代的数组的更具体情况,您可以检查this blogpost

答案 2 :(得分:1)

您有几种选择来执行循环本身。您可以应用peak的出色答案,并在其周围包裹一个shell循环。将echo替换为要运行的脚本。

通过xargs

$ jq -r ".[] | .AssetId" input.json | xargs -n1 echo  # this would print
14462955
114385498
29715011
98253651

通过原始循环

$ for i in $(jq -r ".[] | .AssetId" input.json)
  do
    echo $i
  done
14462955
114385498
29715011
98253651

答案 3 :(得分:0)

使用map的替代方法:

jq "map ( .AssetId ) | .[]"
相关问题