使用 `curl` 和 `jq` 测试 RESTful API - `jq` 基础
1 | {"status":200,"errorMsg":"Operation OK!","data":[{"id":10202,"idolId":158,"activityId":1026,"active":1,"title":"可以","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/e07821a403a442bfa27e1bcd037c50a5/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/2068135D-3AC8-4BB7-B982-48176A42DED2.jpg","thumbnailWidth":360,"thumbnailHeight":480,"videoWidth":360,"videoHeight":480,"publicType":0,"duration":3,"publishTime":1519804082000,"activity":{"id":1026,"title":"麦萌 x Groupy","description":"1位のアイドルはユーザー数が1000万人超えの中国最大級アフレコアプリ「麦萌対手戏」に声で出演!推しメンを応援してね~♪","rankingType":1,"position":1,"goal":"ランキング上位1名のアイドル","img":"http://image.groupy.vip/acticity_banner/activity-maimeng.jpg","tag":"Groupyx麦萌","actionInfo":"http://activity.groupy.cn/maimeng/index.html?activityId\u003d1026","shareLink":"http://share.groupy.cn/html/activity_maimeng/index.html?activityId\u003d1026","shareTitle":"【#Groupyx麦萌コラボ 】","shareDesc":"上位1名は中国最大級アフレコアプリ「麦萌対手戏」に声で出演!応援しよう!","startTime":1506787201000,"endTime":1525190399000,"type":2,"state":"inProgress","rankingList":[],"isActivityEnded":false},"activityTag":"Groupyx麦萌","featureMask":0,"videoItemList":[],"postList":[],"readCount":3,"popularity":1393369,"gcoin":696674,"postCount":0,"giftCount":0,"idol":{"id":158,"userType":"idol","gender":"unknown","nickname":"妈妈说名字长一点可以看到一般人看不到的bug😁g","avatar":"http://upload.groupy.vip/avatar/F7357D2B-C304-43EB-9796-9824B3E14E2A.jpg","sign":"","introduce":"","imgs":"","levelPlatform":0,"dateOfBirth":776962800000,"bloodType":"Unknown","organizationId":3,"fansNums":0,"followedIdol":false},"videoGifts":[{"fansId":20295,"nickname":"抖腿ing,名字要很长才不会抖输别人","avatar":"http://upload.groupy.vip/avatar/14584F09-75CB-4531-A841-7ACF9CEF5BCC.jpg","giftId":5,"giftNums":1,"giftName":"熊","giftImg":"http://image.groupy.vip/gifts/gift_bear.png","gprice":122,"levelPlatform":103},{"fansId":20295,"nickname":"抖腿ing,名字要很长才不会抖输别人","avatar":"http://upload.groupy.vip/avatar/14584F09-75CB-4531-A841-7ACF9CEF5BCC.jpg","giftId":14,"giftNums":2,"giftName":"超级拉面","giftImg":"http://image.groupy.vip/gifts/gift_noodles.png","gprice":538,"levelPlatform":103},{"fansId":20295,"nickname":"抖腿ing,名字要很长才不会抖输别人","avatar":"http://upload.groupy.vip/avatar/14584F09-75CB-4531-A841-7ACF9CEF5BCC.jpg","giftId":8,"giftNums":1,"giftName":"迪士尼城堡","giftImg":"http://image.groupy.vip/gifts/gift_castle.png","gprice":2929,"levelPlatform":103},{"fansId":20295,"nickname":"抖腿ing,名字要很长才不会抖输别人","avatar":"http://upload.groupy.vip/avatar/14584F09-75CB-4531-A841-7ACF9CEF5BCC.jpg","giftId":12,"giftNums":6,"giftName":"红叶林","giftImg":"http://image.groupy.vip/gifts/gift_maple.png","gprice":41928,"levelPlatform":103},{"fansId":20295,"nickname":"抖腿ing,名字要很长才不会抖输别人","avatar":"http://upload.groupy.vip/avatar/14584F09-75CB-4531-A841-7ACF9CEF5BCC.jpg","giftId":10,"giftNums":13,"giftName":"流星雨","giftImg":"http://image.groupy.vip/gifts/gift_meteor.png","gprice":651157,"levelPlatform":103}]},{"id":10213,"idolId":20509,"activityId":1027,"active":1,"title":"参加了喔","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/a9e82239e5484b5094d7756958421720/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/C82F1FFB-FCF6-4585-AEA5-C05B5816F025.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521106389000,"activity":{"id":1027,"title":"Groupy官方采访权争夺战","description":"Groupy官方采访权争夺战盛大开启!应援你的小偶像登上Like数排名TOP1,让更多人Get她的萌点吧~~~\r\n","rankingType":1,"position":1,"goal":"获得Like数TOP1","img":"http://image.groupy.vip/acticity_banner/activity-interview.png","tag":"Groupy独家采访","actionInfo":"http://activity.groupy.cn/interview/index.html?activityId\u003d1027","shareLink":"http://share.groupy.cn/html/activity_interview/index.html?activityId\u003d1027","shareTitle":"【#Groupy独家采访#】","shareDesc":"我家小偶像正在参加GroupyAPP的官方采访权争夺战,发了很多有趣视频,请大家多多支持!#Groupy#","startTime":1506787201000,"endTime":1522511999000,"type":2,"state":"inProgress","rankingList":[],"isActivityEnded":false},"activityTag":"Groupy独家采访","featureMask":0,"videoItemList":[{"id":4094,"videoId":10213,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/a9e82239e5484b5094d7756958421720/BE1346E9-CA87-40E4-BBD3-6BBEC47783B2.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":996751},{"id":4095,"videoId":10213,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/a9e82239e5484b5094d7756958421720/BE1346E9-CA87-40E4-BBD3-6BBEC47783B2.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":996751},{"id":4096,"videoId":10213,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/a9e82239e5484b5094d7756958421720/BE1346E9-CA87-40E4-BBD3-6BBEC47783B2.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":996751}],"postList":[],"readCount":0,"popularity":22,"gcoin":6,"postCount":0,"giftCount":0,"idol":{"id":20509,"userType":"idol","gender":"unknown","nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","sign":"","introduce":"hi。\nhey……😈","imgs":"","levelPlatform":0,"dateOfBirth":927126000000,"placeOfBirth":"Guangdong Shenzhen🤔","bloodType":"A","organizationId":1,"fansNums":0,"followedIdol":false},"videoGifts":[{"fansId":20438,"nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","giftId":1,"giftNums":1,"giftName":"星星","giftImg":"http://image.groupy.vip/gifts/gift_star.png","gprice":1,"levelPlatform":103},{"fansId":20438,"nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","giftId":2,"giftNums":1,"giftName":"喜欢爱心","giftImg":"http://image.groupy.vip/gifts/gift_like.png","gprice":5,"levelPlatform":103}]},{"id":10214,"idolId":158,"activityId":1027,"active":1,"title":"😂","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/176a825d7e9c4e74b9b8fefc76811542/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/5D6D460C-1F2A-40DA-9CDC-10583DFB5378.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521106626000,"activity":{"id":1027,"title":"Groupy官方采访权争夺战","description":"Groupy官方采访权争夺战盛大开启!应援你的小偶像登上Like数排名TOP1,让更多人Get她的萌点吧~~~\r\n","rankingType":1,"position":1,"goal":"获得Like数TOP1","img":"http://image.groupy.vip/acticity_banner/activity-interview.png","tag":"Groupy独家采访","actionInfo":"http://activity.groupy.cn/interview/index.html?activityId\u003d1027","shareLink":"http://share.groupy.cn/html/activity_interview/index.html?activityId\u003d1027","shareTitle":"【#Groupy独家采访#】","shareDesc":"我家小偶像正在参加GroupyAPP的官方采访权争夺战,发了很多有趣视频,请大家多多支持!#Groupy#","startTime":1506787201000,"endTime":1522511999000,"type":2,"state":"inProgress","rankingList":[],"isActivityEnded":false},"activityTag":"Groupy独家采访","featureMask":0,"videoItemList":[{"id":4097,"videoId":10214,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/176a825d7e9c4e74b9b8fefc76811542/2BBFD219-1B08-4A62-BD57-9407F1828D85.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":703556},{"id":4098,"videoId":10214,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/176a825d7e9c4e74b9b8fefc76811542/2BBFD219-1B08-4A62-BD57-9407F1828D85.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":703556},{"id":4099,"videoId":10214,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/176a825d7e9c4e74b9b8fefc76811542/2BBFD219-1B08-4A62-BD57-9407F1828D85.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":703556}],"postList":[],"readCount":0,"popularity":8,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":158,"userType":"idol","gender":"unknown","nickname":"妈妈说名字长一点可以看到一般人看不到的bug😁g","avatar":"http://upload.groupy.vip/avatar/F7357D2B-C304-43EB-9796-9824B3E14E2A.jpg","sign":"","introduce":"","imgs":"","levelPlatform":0,"dateOfBirth":776962800000,"bloodType":"Unknown","organizationId":3,"fansNums":0,"followedIdol":false},"videoGifts":[]},{"id":10206,"idolId":20509,"activityId":0,"active":1,"title":"hi","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/30c7e3f636464284afc8c51272f26ee1/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/12DE0D9E-EBFD-4550-A886-068A1CDCD9DF.jpg","thumbnailWidth":360,"thumbnailHeight":480,"videoWidth":360,"videoHeight":480,"publicType":0,"duration":6,"publishTime":1520215497000,"featureMask":0,"videoItemList":[],"postList":[],"readCount":0,"popularity":101,"gcoin":5,"postCount":0,"giftCount":0,"idol":{"id":20509,"userType":"idol","gender":"unknown","nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","sign":"","introduce":"hi。\nhey……😈","imgs":"","levelPlatform":0,"dateOfBirth":927126000000,"placeOfBirth":"Guangdong Shenzhen🤔","bloodType":"A","organizationId":1,"fansNums":0,"followedIdol":false},"videoGifts":[{"fansId":20440,"nickname":"豆奶豆奶","avatar":"http://upload.groupy.vip/avatar/01FAB3E3-FE0D-4B14-BDC8-4C51C700A659.jpg","giftId":2,"giftNums":1,"giftName":"喜欢爱心","giftImg":"http://image.groupy.vip/gifts/gift_like.png","gprice":5,"levelPlatform":103}]},{"id":10222,"idolId":21421,"activityId":1025,"active":1,"title":"冷漠","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/65717d41ac6d4c548de6ac671878a601/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/29053E43-FA51-46F9-ACA0-291D27C61E62.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521111025000,"activity":{"id":1025,"title":"FFACG x Groupy\r\n広告モデル選定企画","description":"上位1名のアイドルは、中国広州で開催予定の来場者数20万人超えの18th FFACGに、Groupyの広告モデルとして特大看板に登場できます!","rankingType":1,"position":1,"goal":"上位1名","img":"http://image.groupy.vip/acticity_banner/activity-ffacg201805.jpg","tag":"Groupy広告モデル1","actionInfo":"http://activity.groupy.cn/ffacg201805/index.html?activityId\u003d1025","shareLink":"http://share.groupy.cn/html/activity_ffacg201805/index.html?activityId\u003d1025","shareTitle":"【#Groupy広告モデル1 】","shareDesc":"上位1名は来場者数20万人超えの中国広州FFACG特大看板に掲載!応援しよう!","startTime":1506787201000,"endTime":1525190399000,"type":2,"state":"inProgress","rankingList":[],"isActivityEnded":false},"activityTag":"Groupy広告モデル1","featureMask":0,"videoItemList":[{"id":4121,"videoId":10222,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/65717d41ac6d4c548de6ac671878a601/865DFD74-7A77-443F-9775-6E64FCFD2AD1.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4122,"videoId":10222,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/65717d41ac6d4c548de6ac671878a601/865DFD74-7A77-443F-9775-6E64FCFD2AD1.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4123,"videoId":10222,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/65717d41ac6d4c548de6ac671878a601/865DFD74-7A77-443F-9775-6E64FCFD2AD1.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752}],"postList":[],"readCount":0,"popularity":0,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":21421,"userType":"idol","gender":"unknown","nickname":"爱笑的人h健容易坏","avatar":"http://upload.groupy.vip/avatar/1ba403c9-b460-434c-91e9-2fa1e32545bc.jpg","sign":"","introduce":"","imgs":"","levelPlatform":0,"dateOfBirth":-32400000,"bloodType":"Unknown","organizationId":20,"fansNums":0,"followedIdol":false},"videoGifts":[]},{"id":10220,"idolId":20509,"activityId":0,"active":1,"title":"页","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/7fc826466afd447899d1e6b4ae9855ce/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/DB17ED85-04DF-448F-A9E5-BEE785486AD5.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521107491000,"featureMask":0,"videoItemList":[{"id":4115,"videoId":10220,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/7fc826466afd447899d1e6b4ae9855ce/6AD565F5-ACFD-428E-A22E-00A24965D8E8.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4116,"videoId":10220,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/7fc826466afd447899d1e6b4ae9855ce/6AD565F5-ACFD-428E-A22E-00A24965D8E8.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4117,"videoId":10220,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/7fc826466afd447899d1e6b4ae9855ce/6AD565F5-ACFD-428E-A22E-00A24965D8E8.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752}],"postList":[],"readCount":0,"popularity":0,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":20509,"userType":"idol","gender":"unknown","nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","sign":"","introduce":"hi。\nhey……😈","imgs":"","levelPlatform":0,"dateOfBirth":927126000000,"placeOfBirth":"Guangdong Shenzhen🤔","bloodType":"A","organizationId":1,"fansNums":0,"followedIdol":false},"videoGifts":[]},{"id":10219,"idolId":20509,"activityId":1027,"active":1,"title":"哈哈","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/a3062ce33b5d49ab8d2e37669294e820/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/F370AEEA-0E6B-4A9F-ADD6-87E2651EA820.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521107416000,"activity":{"id":1027,"title":"Groupy官方采访权争夺战","description":"Groupy官方采访权争夺战盛大开启!应援你的小偶像登上Like数排名TOP1,让更多人Get她的萌点吧~~~\r\n","rankingType":1,"position":1,"goal":"获得Like数TOP1","img":"http://image.groupy.vip/acticity_banner/activity-interview.png","tag":"Groupy独家采访","actionInfo":"http://activity.groupy.cn/interview/index.html?activityId\u003d1027","shareLink":"http://share.groupy.cn/html/activity_interview/index.html?activityId\u003d1027","shareTitle":"【#Groupy独家采访#】","shareDesc":"我家小偶像正在参加GroupyAPP的官方采访权争夺战,发了很多有趣视频,请大家多多支持!#Groupy#","startTime":1506787201000,"endTime":1522511999000,"type":2,"state":"inProgress","rankingList":[],"isActivityEnded":false},"activityTag":"Groupy独家采访","featureMask":0,"videoItemList":[{"id":4112,"videoId":10219,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/a3062ce33b5d49ab8d2e37669294e820/8B2B2087-FB9F-4D05-86FC-99A561E21A55.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4113,"videoId":10219,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/a3062ce33b5d49ab8d2e37669294e820/8B2B2087-FB9F-4D05-86FC-99A561E21A55.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4114,"videoId":10219,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/a3062ce33b5d49ab8d2e37669294e820/8B2B2087-FB9F-4D05-86FC-99A561E21A55.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752}],"postList":[],"readCount":0,"popularity":0,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":20509,"userType":"idol","gender":"unknown","nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","sign":"","introduce":"hi。\nhey……😈","imgs":"","levelPlatform":0,"dateOfBirth":927126000000,"placeOfBirth":"Guangdong Shenzhen🤔","bloodType":"A","organizationId":1,"fansNums":0,"followedIdol":false},"videoGifts":[]},{"id":10218,"idolId":20509,"activityId":0,"active":1,"title":"来了","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/c98dba44b149484f88aa72877d08a07f/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/4CD900DD-1A4A-4473-B68E-2F00FEFEF5C9.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521107356000,"featureMask":0,"videoItemList":[{"id":4109,"videoId":10218,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/c98dba44b149484f88aa72877d08a07f/4F01D0A5-CC29-4463-8709-6D68AC1A1CD5.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4110,"videoId":10218,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/c98dba44b149484f88aa72877d08a07f/4F01D0A5-CC29-4463-8709-6D68AC1A1CD5.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4111,"videoId":10218,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/c98dba44b149484f88aa72877d08a07f/4F01D0A5-CC29-4463-8709-6D68AC1A1CD5.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752}],"postList":[],"readCount":0,"popularity":0,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":20509,"userType":"idol","gender":"unknown","nickname":"专做直播的小姐姐","avatar":"http://upload.groupy.vip/avatar/0B77F117-D57E-434F-A9FF-60D1F38C9AEB.jpg","sign":"","introduce":"hi。\nhey……😈","imgs":"","levelPlatform":0,"dateOfBirth":927126000000,"placeOfBirth":"Guangdong Shenzhen🤔","bloodType":"A","organizationId":1,"fansNums":0,"followedIdol":false},"videoGifts":[]},{"id":10217,"idolId":158,"activityId":0,"active":1,"title":"2","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/f455f5d01da148f095af77382e292364/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/A69EC31D-5FF2-4993-8A81-24417EF34BBE.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521107247000,"featureMask":0,"videoItemList":[{"id":4106,"videoId":10217,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/f455f5d01da148f095af77382e292364/BEA0FDCC-60EA-42C5-BB26-E59EB533C6EB.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4107,"videoId":10217,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/f455f5d01da148f095af77382e292364/BEA0FDCC-60EA-42C5-BB26-E59EB533C6EB.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4108,"videoId":10217,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/f455f5d01da148f095af77382e292364/BEA0FDCC-60EA-42C5-BB26-E59EB533C6EB.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752}],"postList":[],"readCount":0,"popularity":0,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":158,"userType":"idol","gender":"unknown","nickname":"妈妈说名字长一点可以看到一般人看不到的bug😁g","avatar":"http://upload.groupy.vip/avatar/F7357D2B-C304-43EB-9796-9824B3E14E2A.jpg","sign":"","introduce":"","imgs":"","levelPlatform":0,"dateOfBirth":776962800000,"bloodType":"Unknown","organizationId":3,"fansNums":0,"followedIdol":false},"videoGifts":[]},{"id":10216,"idolId":158,"activityId":0,"active":1,"title":"参加","introduce":" ","firstFrame":"http://videodebugoutput.oss-cn-hongkong.aliyuncs.com/Act-Snapshot/5781f5ff83de40b981f90fbb299ba72b/1000.jpg","thumbnail":"http://upload.groupy.vip/video_thumbnail/67F05E3B-EC1A-41E1-8DC2-11D924C16038.jpg","thumbnailWidth":272,"thumbnailHeight":480,"videoWidth":272,"videoHeight":480,"publicType":0,"duration":10,"publishTime":1521107209000,"featureMask":0,"videoItemList":[{"id":4103,"videoId":10216,"resolution":"ld","url":"http://videodebug.groupy.vip/Act-ss-mp4-ld/5781f5ff83de40b981f90fbb299ba72b/2581A732-12C4-48C7-BB71-723F98C0D7C3.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4104,"videoId":10216,"resolution":"hd","url":"http://videodebug.groupy.vip/Act-ss-mp4-hd/5781f5ff83de40b981f90fbb299ba72b/2581A732-12C4-48C7-BB71-723F98C0D7C3.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752},{"id":4105,"videoId":10216,"resolution":"sd","url":"http://videodebug.groupy.vip/Act-ss-mp4-sd/5781f5ff83de40b981f90fbb299ba72b/2581A732-12C4-48C7-BB71-723F98C0D7C3.mp4","width":272,"height":480,"fps":25,"duration":10,"filesize":808752}],"postList":[],"readCount":0,"popularity":0,"gcoin":0,"postCount":0,"giftCount":0,"idol":{"id":158,"userType":"idol","gender":"unknown","nickname":"妈妈说名字长一点可以看到一般人看不到的bug😁g","avatar":"http://upload.groupy.vip/avatar/F7357D2B-C304-43EB-9796-9824B3E14E2A.jpg","sign":"","introduce":"","imgs":"","levelPlatform":0,"dateOfBirth":776962800000,"bloodType":"Unknown","organizationId":3,"fansNums":0,"followedIdol":false},"videoGifts":[]}]} |
jq
基础用法
在 这里 查看
jq
的完整手册
使用 jq
格式化 json
1 | echo '{"key": "value"}' | jq |
以上命令 echo
命令打印字符串 {"key": "value"}
到控制台, 管道符 (pipeline) |
将前面的命令的输出作为后面 jq
的输入, jq
会格式化该字符串;
1 | cat /tmp/test.json | jq |
以上命令将文件 /tmp/test.json
的内容打印到控制台, 管道符 (pipeline) |
将前面的命令的输出作为后面 jq
的输入, 因此该命令是将文件 /tmp/test.json
内的字符串作为 jq
命令的输入, 来运行 jq
命令;
使用 jq
格式化 json 文件也可以使用以下用法:
1 | jq . /tmp/test.json |
其中 .
是 jq
的一种过滤器, 表示把格式化后的 json 原样打印出来, 更多的过滤器参见后文;
1 | { |
使用 jq
过滤器
如果想对 json 字符串进行操作, 可以使用 jq
的过滤器;
提取 keys
在做网络爬虫和对接第三方 API 的时候, 经常需要对第三方的 API 返回结果建立对应的 Java Bean
, 其中最无聊的操作就是一个一个复制第三方 API 返回的 json 的所有 key , 作为 Java Bean
的字段名, 使用 jq
的 keys
过滤器可以简化这个无聊的过程:
1 | jq 'keys' /tmp/test.json |
提取一个 key 值
jq
默认将原 json 字符串格式化并原样打印, 如果只对 json 中的一个字段的值感兴趣, 可以在 .
后加字段名, jq
将只打印该字段的值:
1 | jq '.status' /tmp/test.json |
提取多个 key 值
如果想提取多个 key 值, 可以使用逗号分隔要提取的 key
名称:
1 | jq '.status, .errorMsg' /tmp/test.json |
计算长度 length
有时候为了验证一个接口返回的数据数量是否与预期的一致, 如对于分页接口要验证返回每页数量是否与期望的一致, 可以使用 length
过滤器
- 如果输入是 json 对象,
length
过滤器将计算该对象的 key 数量:
1 | jq 'length' /tmp/test.json |
- 如果输入是 json array 数组,
length
过滤器计算该数组的元素个数:
1 | jq '.data | length' /tmp/test.json |
jq
的过滤器同样使用管道符 |
串联多个过滤器, 以上命令先抽取出 data
字段的值 (此处是一个数组), 然后将该值作为过滤器 length
的输入, 所以以上命令计算了 data
字段数组长度;
提取数组所有元素的 key 值
测试 json 文件中 data key
所对应的值是一个 video
对象的数组, 为了提取所有 video
的 title
字段, 可以将 “提取 key 值” 的过滤器串联起来使用:
1 | jq '.data[] | .title' /tmp/test.json |
以上命令中, .data
提取出 json 对象的 data
字段, 此时结果是一个 json array
数组, 由于 .key
这种过滤器是提取 json object
对象的 key
值的操作, 因此使用了 []
将该数组拆分为一个一个的 json object
作为后面 .title
过滤器的输入;
对于连续的 key
值抽取, 可以不使用管道符, 直接串联过滤器, 所以以上命令和以下命令等价:
1 | jq '.data[].title' /tmp/test.json |
为了弄清
[]
的用法, 可以分别执行jq .data /tmp/test.json
和jq .data[] /tmp/test.json
对比输出结果
以上的命令输出了所有 video
的 title
字段值:
1 | "可以" |
使用 jq
函数
对于以上的 test.json
文件, 过滤器 .data[].publishTime
提取出所有视频的发布时间, 但该时间是一个 unix
时间戳, 不方便人阅读, 使用 todate
函数可以将时间戳转换成时间字符串:
1 | jq '.data[].publishTime | todate' /tmp/test.json |
看到转换后的时间年份非常大, 这是因为 publishTime
字段是精确到毫秒的时间戳, 而 todate
函数是把它当作精确到秒的时间戳来转换的, 为了纠正该错误, 可以使用 jq
的四则运算:
1 | jq '.data[].publishTime / 1000 | todate' /tmp/test.json |
以上 / 1000
将 publishTime
除以 1000 转换成秒后, 再进行 todate
转换;