亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
讓我們安裝groq
讓我們進(jìn)行一些練習(xí)熱身
查詢諾貝爾獎(jiǎng)獲得者
更多練習(xí)!
使用過(guò)濾器
更多的練習(xí)!
使用預(yù)測(cè)
練習(xí)
一次做更多
概括
鍛煉答案
問(wèn)題3
首頁(yè) web前端 css教學(xué) 查詢終端中的JSON文檔與GROQ

查詢終端中的JSON文檔與GROQ

Apr 14, 2025 am 09:40 AM

查詢終端中的JSON文檔與GROQ

今天到處都有JSON文檔,但是它們很少像想要的那樣結(jié)構(gòu)。它們通常包含過(guò)多的數(shù)據(jù),具有怪異命名的字段,或?qū)?shù)據(jù)放在不必要的嵌套對(duì)像中。圖形相關(guān)對(duì)象查詢(GROQ)是一種查詢語(yǔ)言(例如SQL,但不同),旨在直接在JSON文檔上使用。它基本上使您可以編寫可以快速過(guò)濾的查詢,然後重新格式化JSON文檔,以使其成為最方便的形狀。

GROQ是由Sanity.io(用作主要查詢語(yǔ)言)開(kāi)發(fā)的。它是開(kāi)源的,它為我們提供了內(nèi)置的方式,可以在任何JSON源上使用JavaScript和命令行中使用它。我們一起將GROQ添加到終端工具包中,每當(dāng)您需要將一些JSON數(shù)據(jù)爭(zhēng)吵時(shí),這將節(jié)省您的時(shí)間。

讓我們安裝groq

像大多數(shù)事情一樣,我們需要安裝GROQ CLI工具,並可以使用終端中的NPM(或YARN)進(jìn)行操作:

 $ npm install -G groq -cli

為了使用它,我們需要有一個(gè)JSON文件。我們將使用Curl下載todo數(shù)據(jù)的示例數(shù)據(jù)集:

 $ curl -o todos.json https://jsonplaceholder.typicode.com/todos

讓我們快速查看數(shù)據(jù)中的示例項(xiàng)目:

 {
  “用戶ID”:1,
  “ id”:1,
  “ title”:“ dlectus aut autem”,
  “完成”:false
},,

非常簡(jiǎn)單。我們有一個(gè)用戶ID,一個(gè)待辦事項(xiàng)ID,一個(gè)待辦事項(xiàng)標(biāo)題和一個(gè)布爾值,指定待辦事項(xiàng)是否已完成。

現(xiàn)在,讓我們運(yùn)行一個(gè)基本的groq查詢:查找所有已完成的戒酒,但僅返回TODO標(biāo)題和用戶ID。可以復(fù)制/粘貼這一行,因?yàn)槲覀儠?huì)稍微瀏覽它的意思。

 $ cat todos.json | groq'*[完整== true] {title,userId}' -  pretty

GROQ命令行工具接受標(biāo)準(zhǔn)輸入的JSON文檔。這與“做一件事並在文本流一起工作”的Unix哲學(xué)非常有效。為了從文件中讀取JSON,我們將使用CAT命令。另請(qǐng)注意,GROQ默認(rèn)情況下將在一條線上輸出最小的JSON,但是通過(guò)傳遞,我們獲得了一個(gè)很好的縮進(jìn)和突出顯示的語(yǔ)法。

為了存儲(chǔ)結(jié)果,我們可以使用>:

 $ cat todos.json | groq'*[postate == true] {title,userId}'> result.json

查詢本身由三個(gè)部分組成:

  • *指數(shù)據(jù)集(即JSON文件中的數(shù)據(jù))。
  • [已完成== true]是一個(gè)濾鏡,它刪除了標(biāo)記為不完整的項(xiàng)目。
  • {title,userId}是一個(gè)投影,它導(dǎo)致查詢僅返回“ title”和“ userId”屬性。

讓我們進(jìn)行一些練習(xí)熱身

您可能認(rèn)為您不需要鍛煉才能完成這篇文章!好吧,好消息是,我們只在詳細(xì)介紹更多細(xì)節(jié)之前,我們只用一些事情來(lái)鍛煉頭腦。

  1. 如果您刪除[完整== true]和/或{title,userId},會(huì)發(fā)生什麼?
  2. 您如何更改查詢以查找用戶ID 2的用戶所有Todos?
  3. 您如何更改查詢以找到用戶ID為2的用戶未完成的戒酒?
  4. 如果原始查詢示例中的過(guò)濾器與投影交換,會(huì)發(fā)生什麼?
  5. 您將如何編寫一個(gè)單個(gè)命令(帶管道)下載JSON並使用GROQ處理的命令?

我們將答案放在帖子的結(jié)尾,供您參考。

查詢諾貝爾獎(jiǎng)獲得者

TODO數(shù)據(jù)非常適合進(jìn)行熱身,但是說(shuō)實(shí)話:看看使用拉丁語(yǔ)作為佔(zhàn)位符內(nèi)容的列表不是很有動(dòng)力。但是,諾貝爾獎(jiǎng)?chuàng)碛兴羞^(guò)去的獲獎(jiǎng)?wù)叩臄?shù)據(jù)集,可公開(kāi)使用。

這是樣本返回:

 {
  “獲獎(jiǎng)?wù)摺保篬
    {
      “ id”:“ 1”,
      “ firstName”:“ Wilhelm Conrad”,
      “姓”:“r?ntgen”,
      “天生”:“ 1845-03-27”,
      “死”:“ 1923-02-10”,
      “ borncountry”:“普魯士(現(xiàn)在是德國(guó))”,
      “ borncountrycode”:“ de”,
      “ BornCity”:“ Lennep(現(xiàn)在是Remscheid)”,
      “二歲”:“德國(guó)”,
      “ DIDCOUNTRYCODE”:“ DE”,
      “二歲”:“慕尼黑”,
      “性別”:“男性”,
      “獎(jiǎng)品”:[...],
    },,
    // ...
  這是給出的
}

啊!這更有趣!讓我們下載數(shù)據(jù)集並找到所有挪威獲獎(jiǎng)?wù)叩拿?。在這裡,我們將使用 - 輸出標(biāo)誌進(jìn)行捲曲以將數(shù)據(jù)保存到文件。

 $ curl -輸出勞埃特(Laureate.json)
$ cat Laureate.json | groq'*.laureates [borncountrycode ==“ no”] {firstName}'-pretty

你回來(lái)什麼?我收到了12個(gè)挪威諾貝爾獎(jiǎng)獲得者。不錯(cuò)!

請(qǐng)注意,此查詢不像我們寫的第一個(gè)查詢。我們?cè)谶@個(gè)中有一個(gè)額外的.laureates。當(dāng)我們?cè)赥ODO數(shù)據(jù)集中使用 *時(shí),它代表了整個(gè)JSON文檔,該文檔包含在TODO數(shù)據(jù)集的頂級(jí)陣列中。另一方面,獲獎(jiǎng)文件在頂級(jí)列表中存儲(chǔ)在“獲獎(jiǎng)?wù)摺睂傩灾械捻敿?jí)對(duì)象。

要訪問(wèn)特定項(xiàng)目,我們可以使用過(guò)濾器[0]並僅返回名字。應(yīng)該告訴我們誰(shuí)是挪威人是誰(shuí)贏得諾貝爾獎(jiǎng)。

 $ cat Laureate.json | groq'*.laureates [borncountrycode ==“ no”] {firstName} [0]' -  pretty

//返回的對(duì)象
{
  “ firstName”:“ ivar”
}

更多練習(xí)!

我們將不願(yuàn)意使用此新數(shù)據(jù)集來(lái)查看查詢的工作原理。

  1. 寫一個(gè)查詢,以查找您自己國(guó)家的所有諾貝爾獎(jiǎng)獲得者。
  2. 寫一個(gè)查詢以返回最後的挪威獲獎(jiǎng)?wù)?。提示?1指的是最後一項(xiàng)。
  3. 如果您嘗試直接在根對(duì)像上過(guò)濾會(huì)發(fā)生什麼? *[borncountrycode ==“否”]?
  4. *。

像上次一樣,答案將在這篇文章的結(jié)尾處。

使用過(guò)濾器

現(xiàn)在我們知道,總共有12個(gè)挪威諾貝爾獎(jiǎng)獲得者,其中有多少人在1950年之後出生?弄清Groq沒(méi)問(wèn)題:

 $ cat Laureate.json | groq'*.laureates [borncountrycode ==“ no” && bort> =“ 1950-01-01”] {firstName}' -  pretty

//樣本返回
[
  {
    “ firstName”:“ May-Britt”
  },,
  {
    “ firstName”:“ Edvard I.”
  }
這是給出的

實(shí)際上,Groq擁有一組豐富的操作員,我們可以在過(guò)濾器中使用。我們可以比較(==),不等於(!=),大於(>),大於或等於(> =),小於(

更多的練習(xí)!

您知道鑽頭:嘗試使用過(guò)濾器玩一些,以了解它們?nèi)绾闻c數(shù)據(jù)集使用。當(dāng)然,答案是最後的。

  1. 編寫一個(gè)返回帶有獲獎(jiǎng)?wù)叩牟樵儭?/li>
  2. 過(guò)濾器[borncountrycode ==“ no”] [born> =“ 1950-01-01”]
  3. 您能找到1973年贏得獎(jiǎng)金的所有獲獎(jiǎng)?wù)邌幔?/li>

使用預(yù)測(cè)

諾貝爾獎(jiǎng)數(shù)據(jù)集將每個(gè)獲獎(jiǎng)?wù)叩拿趾托帐戏珠_(kāi),但是如果我們想將它們結(jié)合在一起成一個(gè)領(lǐng)域,該怎麼辦? Groq中的預(yù)測(cè)可以做到這一點(diǎn)!

 *。
  “名稱”:firstName“”姓氏, 
  出生,
  “ prizecount”:count(獎(jiǎng)品),
}

運(yùn)行此查詢告訴我們,May-Britt Moser和Edvard Moser獲得了一個(gè)獎(jiǎng)項(xiàng)(實(shí)際上是同一獎(jiǎng)項(xiàng)):

 [
  {
    “名稱”:“ May-Britt Moser”,
    “天生”:“ 1963-01-04”,
    “ prizecount”:1
  },,
  {
    “名稱”:“ Edvard I. Moser”,
    “天生”:“ 1962-04-27”,
    “ prizecount”:1
  }
這是給出的

這裡發(fā)生了什麼?好吧,當(dāng)我們?cè)趃roq中撰寫投影時(shí),我們真正寫的是一個(gè)JSON對(duì)象。以前,我們有簡(jiǎn)單的投影(例如{firstName}),但這是寫入{“ firstName”:firstName}的快捷方式。通過(guò)使用擴(kuò)展的對(duì)象語(yǔ)法,我們可以重命名鍵並轉(zhuǎn)換值。

GROQ具有一組豐富的運(yùn)算符和用於轉(zhuǎn)換數(shù)據(jù)的功能,包括字符串串聯(lián),算術(shù)運(yùn)算符( - , *, *, /,%,**),計(jì)數(shù)數(shù)組(count(count(prizes))和圓形數(shù)字(round(num,num,

練習(xí)

希望此時(shí)您對(duì)事情有很好的感覺(jué),但是這裡還有一些練習(xí)預(yù)測(cè)工作的方法:

  1. 找到所有贏得兩個(gè)或更多獎(jiǎng)項(xiàng)的獲獎(jiǎng)?wù)摺?/li>
  2. 找到女性贏得了多少獎(jiǎng)。
  3. 格式化一個(gè)將結(jié)果名稱和firstName組合在結(jié)果中的fullname鍵。

一次做更多

觀看以下內(nèi)容:

 $ cat Laureate.json | groq -pretty'
{
  “計(jì)數(shù)”:count(*。獲獎(jiǎng)),
  “挪威人”: *。 
}
'

結(jié)果:

 {
  “計(jì)數(shù)”:928,
  “挪威人”:[
    {
      “ firstName”:“ ivar”
    },,
    {
      “ firstName”:“ lars”
    },,
    …
  這是給出的
}

抓到嗎? GROQ查詢不必從 *開(kāi)始。在此查詢中,我們正在創(chuàng)建一個(gè)JSON對(duì)象,其中值是由單獨(dú)的查詢產(chǎn)生的。這為我們使用GROQ產(chǎn)生的東西提供了很大的靈活性。也許您希望戒酒的總數(shù)以及最後五個(gè)列表的列表?;蛘?,也許您想將招待員分為兩個(gè)單獨(dú)的列表:一個(gè)用於完成,一個(gè)用於不完整。或者,也許您需要將所有內(nèi)容包裝在對(duì)像中,因?yàn)檫@是另一個(gè)工具/庫(kù)/框架所期望的。無(wú)論如何,Groq都可以覆蓋。

讓我們嘗試最後一個(gè)練習(xí)。您可以投影一個(gè)獲獎(jiǎng)?wù)甙粋€(gè)陣列的對(duì)象,其中每個(gè)獲獎(jiǎng)?wù)咭呀?jīng)運(yùn)行的獎(jiǎng)品總數(shù)的圓形百分比,並返回了獲獎(jiǎng)?wù)叩拿??然後,嘗試輸出分發(fā)出的總數(shù)。

概括

在從GROQ中獲得一些充分利用之前,您不需要學(xué)習(xí)太多。如果您遵循了練習(xí),那麼您將成為成為Groq Guru的好途徑。自然,此介紹不會(huì)涉及GROQ的所有不同功能和方面,因此請(qǐng)隨時(shí)在Github上探索規(guī)範(fàn)和項(xiàng)目本身。如果您對(duì)Groq的數(shù)據(jù)爭(zhēng)吵有疑問(wèn),請(qǐng)隨時(shí)與Sanity.io接觸。

鍛煉答案

練習(xí)1
問(wèn)題1

如果您刪除[已完成== true],您將獲得所有戒酒,而不僅僅是完成的戒酒。如果刪除{title,userId},則將獲得所有屬性。

問(wèn)題2
 *[userId == 2]
問(wèn)題3
 *[userId == 2 &&完成== false]或 *[userId == 2 &&!已完成]
問(wèn)題4

如果更改過(guò)濾器的順序和投影,則將首先進(jìn)行投影,然後應(yīng)用過(guò)濾器。這意味著您要過(guò)濾在僅包含標(biāo)題和用戶ID的Todos列表中,並且已完成== True永遠(yuǎn)是不正確的。

問(wèn)題5
 curl https://jsonplaceholder.typicode.com/todos | groq'*[postate == true] {title,userId}'> result.json
練習(xí)2
問(wèn)題1
 *。
問(wèn)題2
 *。
問(wèn)題3

*[borncountrycode ==“否”]將嘗試在對(duì)像上過(guò)濾。這沒(méi)有任何意義,因此您將獲得無(wú)效的答案。

問(wèn)題4

*.laureates \ [0 \] [borncountrycode ==“ no”]無(wú)法正常工作。這將首先找到第一個(gè)獲獎(jiǎng)?wù)撸ㄇ『檬荳ilhelm Conrad),然後嘗試“過(guò)濾”對(duì)象。這是沒(méi)有意義的,因此答案是無(wú)效的。

練習(xí)3
問(wèn)題1
 *。
問(wèn)題2

過(guò)濾器\ [borncountrycode ==“ no” \] [born> =“ 1950-01-01”]第一個(gè)在兩個(gè)“通過(guò)”中進(jìn)行過(guò)濾,但最終結(jié)果是相同的。

問(wèn)題3
 *.laureates [“ 1973”獎(jiǎng)品[]
練習(xí)4
問(wèn)題1
 *.laureates [count(獎(jiǎng)品)> = 2]
問(wèn)題2
計(jì)數(shù)(*。獲獎(jiǎng)[性別==“女性”])
問(wèn)題3
 *.laureates {“ fullname”:surname“,” firstName}
練習(xí)5
 *.laureates {“獲獎(jiǎng)?wù)摺保簕firstName,“百分比”:round(count(count(prizes) / count(*。獲獎(jiǎng)[]。

以上是查詢終端中的JSON文檔與GROQ的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
CSS教程,用於創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫 CSS教程,用於創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過(guò)HTML和CSS實(shí)現(xiàn)簡(jiǎn)單動(dòng)畫;2.使用多個(gè)點(diǎn)的自定義旋轉(zhuǎn)器,通過(guò)不同延遲時(shí)間實(shí)現(xiàn)跳動(dòng)效果;3.在按鈕中添加旋轉(zhuǎn)器,通過(guò)JavaScript切換類來(lái)顯示加載狀態(tài)。每種方法都強(qiáng)調(diào)了設(shè)計(jì)細(xì)節(jié)如顏色、大小、可訪問(wèn)性和性能優(yōu)化的重要性,以提升用戶體驗(yàn)。

解決CSS瀏覽器兼容性問(wèn)題和前綴 解決CSS瀏覽器兼容性問(wèn)題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問(wèn)題需理解瀏覽器支持差異並合理使用廠商前綴。 1.了解常見(jiàn)問(wèn)題如Flexbox、Grid支持不一,position:sticky失效,動(dòng)畫表現(xiàn)不同;2.查閱CanIuse確認(rèn)特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動(dòng)添加前綴;5.安裝PostCSS並配置browserslist指定目標(biāo)瀏覽器;6.構(gòu)建時(shí)自動(dòng)處理兼容性;7.老項(xiàng)目可用Modernizr檢測(cè)特性;8.不必追求所有瀏覽器一致,確

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無(wú)需依賴圖片或SVG。其優(yōu)勢(shì)包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動(dòng)端;3.易於動(dòng)畫化,可結(jié)合hover或JavaScript實(shí)現(xiàn)動(dòng)態(tài)效果;4.不影響佈局流,僅裁剪顯示區(qū)域。常見(jiàn)用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什麼區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什麼區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo????ntalpadding/margins—idealforinlinetextstyling

造型與CSS不同訪問(wèn)的鏈接 造型與CSS不同訪問(wèn)的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問(wèn)過(guò)鏈接的樣式能提升用戶體驗(yàn),尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。 1.使用CSS的:visited偽類可定義已訪問(wèn)鏈接樣式,如顏色變化;2.注意瀏覽器出於隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風(fēng)格協(xié)調(diào),避免突兀;4.移動(dòng)端可能不顯示該效果,建議結(jié)合其他視覺(jué)提示如icon輔助標(biāo)識(shí)。

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過(guò)以下方法實(shí)現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時(shí)自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控製圖片裁剪與焦點(diǎn)展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

揭開(kāi)CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 揭開(kāi)CSS單元的神秘面紗:PX,EM,REM,VW,VH比較 Jul 08, 2025 am 02:16 AM

CSS單位的選擇取決於設(shè)計(jì)需求和響應(yīng)式要求。 1.px用於固定尺寸,適合精確控制但缺乏彈性;2.em是相對(duì)單位,受父元素影響易導(dǎo)致級(jí)聯(lián)問(wèn)題,rem則基於根元素更穩(wěn)定,適合全局縮放;3.vw/vh基於視口大小,適合響應(yīng)式設(shè)計(jì),但需注意極端屏幕下的表現(xiàn);4.選擇時(shí)應(yīng)根據(jù)是否需要響應(yīng)式調(diào)整、元素層級(jí)關(guān)係及視口依賴程度來(lái)決定,合理搭配使用可提升佈局靈活性與維護(hù)性。

什麼是常見(jiàn)的CSS瀏覽器不一致? 什麼是常見(jiàn)的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對(duì)CSS解析存在差異,導(dǎo)致顯示效果不一致,主要包括默認(rèn)樣式差異、盒模型計(jì)算方式、Flexbox和Grid佈局支持程度及某些CSS屬性行為不一致。 1.默認(rèn)樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計(jì)算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應(yīng)多測(cè)試並使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse並提供降級(jí)

See all articles