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

目錄
讓我們安裝groq
讓我們進行一些練習熱身
查詢諾貝爾獎獲得者
更多練習!
使用過濾器
更多的練習!
使用預測
練習
一次做更多
概括
鍛煉答案
問題3
首頁 web前端 css教程 查詢終端中的JSON文檔與GROQ

查詢終端中的JSON文檔與GROQ

Apr 14, 2025 am 09:40 AM

查詢終端中的JSON文檔與GROQ

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

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

讓我們安裝groq

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

 $ npm install -G groq -cli

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

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

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

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

非常簡單。我們有一個用戶ID,一個待辦事項ID,一個待辦事項標題和一個布爾值,指定待辦事項是否已完成。

現(xiàn)在,讓我們運行一個基本的groq查詢:查找所有已完成的戒酒,但僅返回TODO標題和用戶ID。可以復制/粘貼這一行,因為我們會稍微瀏覽它的意思。

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

GROQ命令行工具接受標準輸入的JSON文檔。這與“做一件事并在文本流一起工作”的Unix哲學非常有效。為了從文件中讀取JSON,我們將使用CAT命令。另請注意,GROQ默認情況下將在一條線上輸出最小的JSON,但是通過傳遞,我們獲得了一個很好的縮進和突出顯示的語法。

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

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

查詢本身由三個部分組成:

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

讓我們進行一些練習熱身

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

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

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

查詢諾貝爾獎獲得者

TODO數(shù)據(jù)非常適合進行熱身,但是說實話:看看使用拉丁語作為占位符內(nèi)容的列表不是很有動力。但是,諾貝爾獎?chuàng)碛兴羞^去的獲獎者的數(shù)據(jù)集,可公開使用。

這是樣本返回:

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

啊!這更有趣!讓我們下載數(shù)據(jù)集并找到所有挪威獲獎者的名字。在這里,我們將使用 - 輸出標志進行卷曲以將數(shù)據(jù)保存到文件。

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

你回來什么?我收到了12個挪威諾貝爾獎獲得者。不錯!

請注意,此查詢不像我們寫的第一個查詢。我們在這個中有一個額外的.laureates。當我們在TODO數(shù)據(jù)集中使用 *時,它代表了整個JSON文檔,該文檔包含在TODO數(shù)據(jù)集的頂級陣列中。另一方面,獲獎文件在頂級列表中存儲在“獲獎者”屬性中的頂級對象。

要訪問特定項目,我們可以使用過濾器[0]并僅返回名字。應該告訴我們誰是挪威人是誰贏得諾貝爾獎。

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

//返回的對象
{
  “ firstName”:“ ivar”
}

更多練習!

我們將不愿意使用此新數(shù)據(jù)集來查看查詢的工作原理。

  1. 寫一個查詢,以查找您自己國家的所有諾貝爾獎獲得者。
  2. 寫一個查詢以返回最后的挪威獲獎者。提示:-1指的是最后一項。
  3. 如果您嘗試直接在根對象上過濾會發(fā)生什么? *[borncountrycode ==“否”]?
  4. *。

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

使用過濾器

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

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

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

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

更多的練習!

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

  1. 編寫一個返回帶有獲獎者的查詢。
  2. 過濾器[borncountrycode ==“ no”] [born> =“ 1950-01-01”]
  3. 您能找到1973年贏得獎金的所有獲獎者嗎?

使用預測

諾貝爾獎數(shù)據(jù)集將每個獲獎者的名字和姓氏分開,但是如果我們想將它們結(jié)合在一起成一個領(lǐng)域,該怎么辦? Groq中的預測可以做到這一點!

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

運行此查詢告訴我們,May-Britt Moser和Edvard Moser獲得了一個獎項(實際上是同一獎項):

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

這里發(fā)生了什么?好吧,當我們在groq中撰寫投影時,我們真正寫的是一個JSON對象。以前,我們有簡單的投影(例如{firstName}),但這是寫入{“ firstName”:firstName}的快捷方式。通過使用擴展的對象語法,我們可以重命名鍵并轉(zhuǎn)換值。

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

練習

希望此時您對事情有很好的感覺,但是這里還有一些練習預測工作的方法:

  1. 找到所有贏得兩個或更多獎項的獲獎者。
  2. 找到女性贏得了多少獎。
  3. 格式化一個將結(jié)果名稱和firstName組合在結(jié)果中的fullname鍵。

一次做更多

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

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

結(jié)果:

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

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

讓我們嘗試最后一個練習。您可以投影一個獲獎者包含一個陣列的對象,其中每個獲獎者已經(jīng)運行的獎品總數(shù)的圓形百分比,并返回了獲獎者的名字?然后,嘗試輸出分發(fā)出的總數(shù)。

概括

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

鍛煉答案

練習1
問題1

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

問題2
 *[userId == 2]
問題3
 *[userId == 2 &&完成== false]或 *[userId == 2 &&!已完成]
問題4

如果更改過濾器的順序和投影,則將首先進行投影,然后應用過濾器。這意味著您要過濾在僅包含標題和用戶ID的Todos列表中,并且已完成== True永遠是不正確的。

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

*[borncountrycode ==“否”]將嘗試在對象上過濾。這沒有任何意義,因此您將獲得無效的答案。

問題4

*.laureates \ [0 \] [borncountrycode ==“ no”]無法正常工作。這將首先找到第一個獲獎者(恰好是Wilhelm Conrad),然后嘗試“過濾”對象。這是沒有意義的,因此答案是無效的。

練習3
問題1
 *。
問題2

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

問題3
 *.laureates [“ 1973”獎品[]
練習4
問題1
 *.laureates [count(獎品)> = 2]
問題2
計數(shù)(*。獲獎[性別==“女性”])
問題3
 *.laureates {“ fullname”:surname“,” firstName}
練習5
 *.laureates {“獲獎者”:{firstName,“百分比”:round(count(count(prizes) / count(*。獲獎[]。

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

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

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

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

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

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

顯示:內(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剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

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

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

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

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

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

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

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

什么是常見的CSS瀏覽器不一致? 什么是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

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

See all articles