찾다
웹 프론트엔드CSS 튜토리얼터미널의 쿼리 JSON 문서는 Groq를 사용합니다

터미널의 쿼리 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으로 문의하세요.
두 개의 이미지와 API : 제품을 다시 칠하는 데 필요한 모든 것두 개의 이미지와 API : 제품을 다시 칠하는 데 필요한 모든 것Apr 15, 2025 am 11:27 AM

최근에 제품 이미지의 색상을 동적으로 업데이트하는 솔루션을 찾았습니다. 따라서 제품 중 하나만 사용하여 다른 방식으로 색칠 할 수 있습니다.

주간 플랫폼 뉴스 : 제 3 자 코드, 수동 혼합 콘텐츠, 가장 느린 연결이있는 국가의 영향주간 플랫폼 뉴스 : 제 3 자 코드, 수동 혼합 콘텐츠, 가장 느린 연결이있는 국가의 영향Apr 15, 2025 am 11:19 AM

이번 주에 라운드 업, Lighthouse는 타사 스크립트에 빛을 비추고 불안한 자원이 안전한 사이트에서 차단되고 많은 국가 연결 속도가 차단됩니다.

직접 비자 스크립트 기반 분석을 호스팅하는 옵션직접 비자 스크립트 기반 분석을 호스팅하는 옵션Apr 15, 2025 am 11:09 AM

사이트에서 방문자 및 사용 데이터를 추적하는 데 도움이되는 분석 플랫폼이 많이 있습니다. 아마도 널리 사용되는 Google 웹 로그 분석

그것은 모두 헤드에있는 모든 것 : React Helmet과 함께 React 전원 사이트의 문서 헤드 관리그것은 모두 헤드에있는 모든 것 : React Helmet과 함께 React 전원 사이트의 문서 헤드 관리Apr 15, 2025 am 11:01 AM

문서 헤드는 웹 사이트에서 가장 화려한 부분이 아닐 수도 있지만 웹 사이트의 성공에 중요합니다.

JavaScript의 Super () 란 무엇입니까?JavaScript의 Super () 란 무엇입니까?Apr 15, 2025 am 10:59 AM

Super ()?를 호출하는 JavaScript를 볼 때 어떤 일이 발생 하는가. 아동 클래스에서는 Super ()를 사용하여 부모의 생성자와 Super를 호출합니다. 그것의 접근

다양한 유형의 기본 JavaScript 팝업 비교다양한 유형의 기본 JavaScript 팝업 비교Apr 15, 2025 am 10:48 AM

JavaScript에는 사용자 상호 작용을위한 특수 UI를 표시하는 다양한 내장 팝업 API가 있습니다. 뛰어나게:

액세스 가능한 웹 사이트를 구축하기가 어려운 이유는 무엇입니까?액세스 가능한 웹 사이트를 구축하기가 어려운 이유는 무엇입니까?Apr 15, 2025 am 10:45 AM

나는 다른 날에 많은 회사들이 액세스 가능한 웹 사이트를 만드는 데 어려움을 겪고있는 이유에 대해 다른 프론트 엔드 사람들과 대화를 나누고있었습니다. 액세스 가능한 웹 사이트가 왜 그렇게 어려운가

'숨겨진'속성은 눈에 띄게 약합니다'숨겨진'속성은 눈에 띄게 약합니다Apr 15, 2025 am 10:43 AM

당신이해야 할 일을 정확하게 수행하는 HTML 속성이 있습니다.

See all articles

핫 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기