목차
Groq를 설치합시다
몇 가지 운동으로 워밍업합시다
노벨상 수상자를 쿼리합니다
더 많은 운동!
필터 작업
예측 작업
수업 과정
한 번에 더 많은 일을합니다
요약
운동 답변
질문 3
웹 프론트엔드 CSS 튜토리얼 터미널의 쿼리 JSON 문서는 Groq를 사용합니다

터미널의 쿼리 JSON 문서는 Groq를 사용합니다

Apr 14, 2025 am 09:40 AM

터미널의 쿼리 JSON 문서는 Groq를 사용합니다

JSON 문서는 오늘날 어디에나 있지만 원하는 방식으로 거의 구성되지 않습니다. 그들은 종종 너무 많은 데이터를 포함하고, 이상하게 명명 된 필드를 가지고 있거나, 데이터를 불필요한 중첩 객체에 배치합니다. GROQ (Graph-Relational Object Queries)는 JSON 문서에서 직접 작동하도록 설계된 쿼리 언어 (SQL과 같은)입니다. 기본적으로 신속하게 필터링 한 다음 JSON 문서를 재구성하여 가장 편리한 모양으로 가져올 수있는 쿼리를 작성할 수 있습니다.

Groq는 Sanity.io (기본 쿼리 언어로 사용되는 곳)에 의해 개발되었습니다. 오픈 소스이며 JavaScript 및 JSON 소스의 명령 줄을 사용하는 내장 방법을 제공합니다. 터미널 툴킷에 Groq를 추가하여 POJECT에서 JSON 데이터를 정리해야 할 때마다 시간을 절약 할 수 있습니다.

Groq를 설치합시다

대부분의 것들과 마찬가지로 Groq CLI 도구를 설치해야하며 터미널에서 NPM (또는 원사)을 사용하여 수행 할 수 있습니다.

 $ npm install -g groq -cli
로그인 후 복사

그것을 가지고 놀려면 JSON 파일을 사용할 수 있어야합니다. CURL을 사용하여 TODO 데이터의 예제 데이터 세트를 다운로드합니다.

 $ curl -o todos.json https://jsonplaceholder.typicode.com/todos
로그인 후 복사

데이터의 샘플 항목을 간단히 살펴 보겠습니다.

 {
  "userId": 1,
  "ID": 1,
  "제목": "DeLectus Aut Autem",
  "완료": 거짓
},
로그인 후 복사

매우 간단합니다. 우리는 사용자 ID, TODO 항목 ID, TODO 제목 및 TODO 항목이 완료되었는지 여부를 지정하는 부울이 있습니다.

이제 기본 Groq 쿼리를 실행하겠습니다 : 완료된 모든 Todos를 찾아 보지만 Todo 타이틀과 사용자 ID 만 반환하십시오. 이 줄을 복사/붙여 넣는 것은 괜찮습니다.

 $ cat todos.json | groq '*[완료 == true] {title, userId}'--pretty
로그인 후 복사

Groq 명령 줄 도구는 표준 입력에 대한 JSON 문서를 허용합니다. 이것은“한 가지 일을하고 텍스트 스트림에서 일하는 것”이라는 유닉스 철학과 매우 잘 어울립니다. 파일 에서 JSON을 읽으려면 CAT 명령을 사용합니다. 또한 Groq는 기본적으로 한 줄에 최소 JSON을 출력하지만 -Pretty를 통과함으로써 우리는 멋지게 들여 쓰기 및 강조된 구문을 얻습니다.

결과를 저장하려면>을 사용하여 새 파일에 파이프 할 수 있습니다.

 $ cat todos.json | groq '*[완료 == true] {title, userId}'> result.json
로그인 후 복사

쿼리 자체는 세 부분으로 구성됩니다.

  • * 데이터 세트를 나타냅니다 (예 : JSON 파일의 데이터).
  • [완료 == true]는 불완전한 것으로 표시된 항목을 제거하는 필터 입니다.
  • {title, userId}는 쿼리가 "제목"및 "userID"속성 만 반환하는 투영 입니다.

몇 가지 운동으로 워밍업합시다

이 게시물을 살펴보기 위해 운동을해야한다고 생각하지 않았을 것입니다! 좋은 소식은 우리가 더 자세한 내용을 얻기 전에 Groq와 함께 시도 할 몇 가지 사항만으로 마음을 운동한다는 것입니다.

  1. [완료된 == true] 및/또는 {title, userId}를 제거하면 어떻게됩니까?
  2. ID가 2 인 사용자가 모든 TODO를 찾도록 쿼리를 어떻게 변경할 수 있습니까?
  3. 쿼리를 어떻게 변경하여 2 인 사용자의 불완전한 토도를 찾을 수 있습니까?
  4. 원래 쿼리 예제의 필터가 위치를 투영과 교환하면 어떻게됩니까?
  5. JSON을 다운로드하고 Groq로 처리하는 단일 명령 (파이프 포함)을 어떻게 작성 하시겠습니까?

게시물 끝에 답을 참조 할 수 있습니다.

노벨상 수상자를 쿼리합니다

TODO 데이터는 워밍업에 좋지만 솔직히 말하면 라틴어를 자리 표시 자 콘텐츠로 사용하는 목록을 보는 것은 그다지 동기를 부여하지 않습니다. 그러나 노벨상에는 공개적으로 사용할 수있는 모든 과거 수상자의 데이터 세트가 있습니다.

다음은 샘플 리턴입니다.

 {
  "수상자": [
    {
      "ID": "1",
      "FirstName": "Wilhelm Conrad",
      "성": "Röntgen",
      "Born": "1845-03-27",
      "죽었다": "1923-02-10",
      "Borncountry": "Prussia (현재 독일)",
      "BorncountryCode": "de",
      "Borncity": "Lennep (지금은 렘치이드)",
      "죽음": "독일",
      "DiedCountryCode": "de",
      "죽음": "뮌헨",
      "성별": "남성",
      "상": [...],
    },
    // ...
  ]]
}
로그인 후 복사

아! 이것은 훨씬 더 흥미 롭습니다! 데이터 세트를 다운로드하고 모든 노르웨이 수상자의 이름을 찾아 봅시다. 여기에서는 데이터를 파일에 저장하기 위해 -utput 플래그를 사용합니다.

 $ curl -output laureate.json http://api.nobelprize.org/v1/laureate.json
$ Cat Laureate.json | groq '*.laureates [borncountryCode == "no"] {firstName}'--pretty
로그인 후 복사

당신은 무엇을 돌아 오나요? 노르웨이 노벨상 수상자 12 명을 받았습니다. 나쁘지 않다!

이 쿼리는 우리가 쓴 첫 번째 쿼리와는 다릅니다. 우리는 이것에 추가 .laureates를 가지고 있습니다. TODO 데이터 세트에서 *를 사용하면 TODO 데이터 세트의 최상위 수준의 배열에 포함 된 전체 JSON 문서를 나타냅니다. 반면, 수상자 파일은 최상위 수준의 객체를 사용하여 수상자 목록이 "수상자"속성에 저장됩니다.

특정 항목에 액세스하려면 필터 [0]를 사용하고 이름 만 반환 할 수 있습니다. 그것은 우리에게 첫 번째 노르웨이 인이 노벨상을 수상한 사람을 알려 주어야합니다.

 $ Cat Laureate.json | groq '*.laureates [borncountryCode == "no"] {firstName} [0] -Pretty

// 반환 된 객체
{
  "FirstName": "Ivar"
}
로그인 후 복사

더 많은 운동!

우리는이 새로운 데이터 세트를 사용하여 쿼리가 어떻게 작동하는지 확인하지 않아도됩니다.

  1. 자국의 모든 노벨상 수상자를 찾기 위해 쿼리를 작성하십시오.
  2. 마지막 노르웨이 수상자를 반환하려면 쿼리를 작성하십시오. 힌트 : -1은 마지막 항목을 나타냅니다.
  3. 루트 객체를 직접 필터링하려고하면 어떻게됩니까? *[borncountryCode == "아니오"]?
  4. *.laureates \ [borncountryCode == "no"\] [0] 및 *.laureates \ [0 \] [borncountryCode == "no"]의 차이점은 무엇입니까?

지난번과 마찬가지로 답변은이 게시물의 끝에 있습니다.

필터 작업

이제 우리는 총 12 명의 노벨상 수상자들이 총 1250 년 이후 몇 명이 태어났다는 것을 알고 있습니까? 그로크로 알아내는 데 아무런 문제가 없습니다.

 $ Cat Laureate.json | groq '*.laureates [borncountryCode == "no"&& born> = "1950-01-01"] {FirstName}'--pretty

// 샘플 리턴
[의 뜻
  {
    "FirstName": "May-Britt"
  },
  {
    "FirstName": "Edvard I."
  }
]]
로그인 후 복사

실제로 Groq에는 필터 내부에서 사용할 수있는 풍부한 연산자 세트가 있습니다. 숫자와 문자열을 동일하지 않은 (==), 동일하지 않은 (! =), (>)보다 크지 않은 (>), 크거나 동일하거나 (> =), (

더 많은 운동!

드릴을 알고 있습니다 : 필터와 함께 플레이하여 데이터 세트에서 어떻게 작동하는지 확인하십시오. 물론 답변은 결국입니다.

  1. 살아있는 수상자를 반환하는 쿼리를 작성하십시오.
  2. 필터 [borncountryCode == "no"] [born> = "1950-01-01"]와 [borncountryCode == "no"&& rel> = "1950-01-01] 사이에 차이가 있습니까?
  3. 1973 년 상을 수상한 모든 수상자를 찾을 수 있습니까?

예측 작업

노벨상 데이터 세트는 각 수상자의 이름과 성을 분리하지만 한 필드로 결합하려면 어떻게해야합니까? Groq의 투영은 정확히 그렇게 할 수 있습니다!

 *.laureates [borncountryCode == "no"&& born> = "1950-01-01"] {
  "이름": FirstName ""성, 
  태어나다,
  "PrizeCount": Count (상),
}
로그인 후 복사

이 쿼리를 실행하면 May-Britt Moser와 Edvard Moser가 하나의 상을 받았다고합니다 (실제로는 같은 상이었습니다).

 [의 뜻
  {
    "이름": "May-Britt Moser",
    "Born": "1963-01-04",
    "PrizeCount": 1
  },
  {
    "이름": "Edvard I. Moser",
    "Born": "1962-04-27",
    "PrizeCount": 1
  }
]]
로그인 후 복사

여기서 무슨 일이 있었나요? 글쎄, 우리가 Groq에 투영을 쓸 때 우리가 실제로 쓰는 것은 JSON 객체입니다. 이전에는 간단한 예측 ({firstName})이 있었지만 { "FirstName": FirstName}을 작성하는 단축키 방법입니다. 확장 된 객체 구문을 사용하면 키 이름을 바꾸고 값을 변환 할 수 있습니다.

Groq에는 문자열 연결, 산술 연산자 (, -, *, /, / %, **), 계산 배열 (Count (상금)) 및 반올림 번호 (라운드,

수업 과정

바라건대, 당신은이 시점에서 물건에 대한 좋은 느낌을 받고 있지만, 여기에 예상 작업을 수행하는 데 더 많은 방법이 있습니다.

  1. 두 개 이상의 상을 수상한 모든 수상자를 찾으십시오.
  2. 여성이 얼마나 많은 상을 받았는지 찾으십시오.
  3. 결과에서 마지막 이름과 목을 결합하는 풀 이름 키를 형식으로 지정하십시오.

한 번에 더 많은 일을합니다

이것을 시청하십시오 :

 $ Cat Laureate.json | groq-pretty '
{
  "count": count (*. 수상자),
  "Norwegians": *.laureates [borncountryCode == "no"] {FirstName}, 
}
'
로그인 후 복사

결과 :

 {
  "카운트": 928,
  "노르웨이 인": [
    {
      "FirstName": "Ivar"
    },
    {
      "FirstName": "lars"
    },
    …
  ]]
}
로그인 후 복사

잡아? Groq 쿼리는 *부터 시작할 필요가 없습니다. 이 쿼리에서는 값이 별도의 쿼리의 결과 인 JSON 객체를 생성합니다. 이것은 Groq로 생산할 수있는 것에 많은 유연성을 제공합니다. 어쩌면 당신은 총 5 개의 마지막 목록과 함께 불완전한 토도의 수를 원할 것입니다. 또는 Todos를 두 개의 개별 목록으로 나누고 싶을 수도 있습니다. 하나는 완성 된 경우와 하나는 불완전합니다. 또는 다른 도구/라이브러리/프레임 워크가 기대하는 것이기 때문에 객체 내부의 모든 것을 랩핑해야 할 수도 있습니다. 어떤 경우이든 Groq는 당신을 덮었습니다.

마지막 연습을 시도해 봅시다. 수상자들이 각 수상자가 운영 한 총 상 수의 둥근 비율의 배열이 포함 된 물체를 투사하여 수상자의 이름을 반환 할 수 있습니까? 그런 다음 총 숫자를 출력하십시오.

요약

Groq에서 잘 사용하기 전에 배울 필요는 없습니다. 운동을 따랐다면, 당신은 그로크 전문가가되는 큰 길을 가고 있습니다. 당연히이 소개는 Groq의 모든 다른 기능과 측면을 다루지 않으므로 Github의 사양과 프로젝트 자체를 자유롭게 탐색하십시오. 그리고 Groq와의 데이터에 대한 질문이 있다면 Sanity.io의 팀에 자유롭게 연락하십시오.

운동 답변

운동 1
질문 1

[완료된 == true]를 제거하면 완료된 것뿐만 아니라 모든 토도가 얻을 수 있습니다. {title, userId}를 제거하면 모든 속성이 나타납니다.

질문 2
 *[userID == 2]
로그인 후 복사
질문 3
 *[userId == 2 && 완성 == 거짓] 또는 *[userId == 2 &&! 완료]
로그인 후 복사
질문 4

필터의 순서와 프로젝션을 변경하면 먼저 프로젝션을 수행 한 다음 필터를 적용합니다. 즉, 제목과 userID 만 포함하는 TODO 목록을 필터링하고 있으며 완료 == TRUE는 결코 사실이 아닙니다.

질문 5
 CURL https://jsonplaceholder.typicode.com/todos | groq '*[완료 == true] {title, userId}'> result.json
로그인 후 복사
연습 2
질문 1
 *.laureates [borncountryCode == "insert-your-country-Here"]
로그인 후 복사
질문 2
 *.laureates \ [borncountryCode == "no"\] [-1]
로그인 후 복사
질문 3

*[borncountryCode == "no"]는 객체를 필터링하려고합니다. 이것은 말이되지 않으므로 답으로 Null을 얻을 수 있습니다.

질문 4

*.laureates \ [0 \] [borncountryCode == "no"]는 생각대로 작동하지 않습니다. 이것은 먼저 첫 번째 수상자 (Wilhelm Conrad)를 찾은 다음 객체를“필터링”하려고 시도합니다. 이것은 말이되지 않으므로 대답이 무의미합니다.

연습 3
질문 1
 *.laureates [dis == "0000-00-00"]
로그인 후 복사
질문 2

필터 \ [borncountryCode == "no"\] [born> = "1950-01-01"] 및 [borncountryCode = ""no "&& born> ="1950-01-01 "] 사이에는 차이가 없습니다. 첫 번째는 두 개의 "패스"로 필터링을 수행하지만 최종 결과는 동일합니다.

질문 3
 *.laureates [ "1973"상 []. 년]
로그인 후 복사
운동 4
질문 1
 *.laureates [count (상금)> = 2]
로그인 후 복사
질문 2
 count (*. 수상자 [gender == "여성"])
로그인 후 복사
질문 3
 *.laureates { "fullName": 성 ","FirstName}
로그인 후 복사
운동 5
 *.laureates { "수상자": {FirstName, "백분율": Round (Count (상금) / Count (*. Laureates []. Piece), 3)*100}, "Total": Count (*. Laureates []. 상)}
로그인 후 복사

위 내용은 터미널의 쿼리 JSON 문서는 Groq를 사용합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Google 글꼴 변수 글꼴 Google 글꼴 변수 글꼴 Apr 09, 2025 am 10:42 AM

Google Fonts가 새로운 디자인 (트윗)을 출시 한 것을 볼 수 있습니다. 마지막 큰 재 설계와 비교할 때 이것은 훨씬 더 반복적 인 느낌이 듭니다. 차이를 간신히 말할 수 있습니다

HTML, CSS 및 JavaScript로 애니메이션 카운트 다운 타이머를 만드는 방법 HTML, CSS 및 JavaScript로 애니메이션 카운트 다운 타이머를 만드는 방법 Apr 11, 2025 am 11:29 AM

프로젝트에 카운트 다운 타이머가 필요한 적이 있습니까? 그런 것은 플러그인에 도달하는 것이 당연하지만 실제로는 훨씬 더 많습니다.

HTML 데이터 속성 안내서 HTML 데이터 속성 안내서 Apr 11, 2025 am 11:50 AM

HTML, CSS 및 JavaScript의 데이터 속성에 대해 알고 싶었던 모든 것.

Sass를 더 빨리 만들기위한 개념 증명 Sass를 더 빨리 만들기위한 개념 증명 Apr 16, 2025 am 10:38 AM

새로운 프로젝트가 시작될 때, Sass 컴파일은 눈을 깜박이게합니다. 특히 BrowserSync와 짝을 이루는 경우 기분이 좋습니다.

SVG에서 타탄 패턴을 생성하는 정적 사이트를 만드는 방법 SVG에서 타탄 패턴을 생성하는 정적 사이트를 만드는 방법 Apr 09, 2025 am 11:29 AM

타탄은 일반적으로 스코틀랜드, 특히 세련된 킬트와 관련된 패턴의 천입니다. tartanify.com에서 우리는 5,000 개가 넘는 타탄을 모았습니다

WordPress 테마에서 VUE 구성 요소를 빌드하는 방법 WordPress 테마에서 VUE 구성 요소를 빌드하는 방법 Apr 11, 2025 am 11:03 AM

Inline-Template 지시문을 사용하면 기존 WordPress 마크 업에 대한 진보적 인 향상으로 풍부한 VUE 구성 요소를 구축 할 수 있습니다.

PHP는 템플릿을위한 A-OK입니다 PHP는 템플릿을위한 A-OK입니다 Apr 11, 2025 am 11:04 AM

PHP 템플릿은 종종 서브 파 코드를 용이하게하는 데 나쁜 랩을 얻지 만, 그렇지 않아야합니다. PHP 프로젝트가 기본을 시행 할 수있는 방법을 살펴 보겠습니다.

접근 가능한 색상 조합을 생성하기 위해 SASS를 프로그래밍합니다 접근 가능한 색상 조합을 생성하기 위해 SASS를 프로그래밍합니다 Apr 09, 2025 am 11:30 AM

우리는 항상 웹에 더 액세스 할 수 있도록하고 있습니다. 색상 대비는 수학 일 뿐이므로 Sass는 디자이너가 놓친 에지 케이스를 다룰 수 있습니다.

See all articles