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와 함께 시도 할 몇 가지 사항만으로 마음을 운동한다는 것입니다.
- [완료된 == true] 및/또는 {title, userId}를 제거하면 어떻게됩니까?
- ID가 2 인 사용자가 모든 TODO를 찾도록 쿼리를 어떻게 변경할 수 있습니까?
- 쿼리를 어떻게 변경하여 2 인 사용자의 불완전한 토도를 찾을 수 있습니까?
- 원래 쿼리 예제의 필터가 위치를 투영과 교환하면 어떻게됩니까?
- 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은 마지막 항목을 나타냅니다.
- 루트 객체를 직접 필터링하려고하면 어떻게됩니까? *[borncountryCode == "아니오"]?
- *.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에는 필터 내부에서 사용할 수있는 풍부한 연산자 세트가 있습니다. 숫자와 문자열을 동일하지 않은 (==), 동일하지 않은 (! =), (>)보다 크지 않은 (>), 크거나 동일하거나 (> =), (
더 많은 운동!
드릴을 알고 있습니다 : 필터와 함께 플레이하여 데이터 세트에서 어떻게 작동하는지 확인하십시오. 물론 답변은 결국입니다.
- 살아있는 수상자를 반환하는 쿼리를 작성하십시오.
- 필터 [borncountryCode == "no"] [born> = "1950-01-01"]와 [borncountryCode == "no"&& rel> = "1950-01-01] 사이에 차이가 있습니까?
- 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 (상금)) 및 반올림 번호 (라운드, 바라건대, 당신은이 시점에서 물건에 대한 좋은 느낌을 받고 있지만, 여기에 예상 작업을 수행하는 데 더 많은 방법이 있습니다. 이것을 시청하십시오 : 결과 : 잡아? Groq 쿼리는 *부터 시작할 필요가 없습니다. 이 쿼리에서는 값이 별도의 쿼리의 결과 인 JSON 객체를 생성합니다. 이것은 Groq로 생산할 수있는 것에 많은 유연성을 제공합니다. 어쩌면 당신은 총 5 개의 마지막 목록과 함께 불완전한 토도의 수를 원할 것입니다. 또는 Todos를 두 개의 개별 목록으로 나누고 싶을 수도 있습니다. 하나는 완성 된 경우와 하나는 불완전합니다. 또는 다른 도구/라이브러리/프레임 워크가 기대하는 것이기 때문에 객체 내부의 모든 것을 랩핑해야 할 수도 있습니다. 어떤 경우이든 Groq는 당신을 덮었습니다. 마지막 연습을 시도해 봅시다. 수상자들이 각 수상자가 운영 한 총 상 수의 둥근 비율의 배열이 포함 된 물체를 투사하여 수상자의 이름을 반환 할 수 있습니까? 그런 다음 총 숫자를 출력하십시오. Groq에서 잘 사용하기 전에 배울 필요는 없습니다. 운동을 따랐다면, 당신은 그로크 전문가가되는 큰 길을 가고 있습니다. 당연히이 소개는 Groq의 모든 다른 기능과 측면을 다루지 않으므로 Github의 사양과 프로젝트 자체를 자유롭게 탐색하십시오. 그리고 Groq와의 데이터에 대한 질문이 있다면 Sanity.io의 팀에 자유롭게 연락하십시오. [완료된 == true]를 제거하면 완료된 것뿐만 아니라 모든 토도가 얻을 수 있습니다. {title, userId}를 제거하면 모든 속성이 나타납니다. 필터의 순서와 프로젝션을 변경하면 먼저 프로젝션을 수행 한 다음 필터를 적용합니다. 즉, 제목과 userID 만 포함하는 TODO 목록을 필터링하고 있으며 완료 == TRUE는 결코 사실이 아닙니다. *[borncountryCode == "no"]는 객체를 필터링하려고합니다. 이것은 말이되지 않으므로 답으로 Null을 얻을 수 있습니다. *.laureates \ [0 \] [borncountryCode == "no"]는 생각대로 작동하지 않습니다. 이것은 먼저 첫 번째 수상자 (Wilhelm Conrad)를 찾은 다음 객체를“필터링”하려고 시도합니다. 이것은 말이되지 않으므로 대답이 무의미합니다. 필터 \ [borncountryCode == "no"\] [born> = "1950-01-01"] 및 [borncountryCode = ""no "&& born> ="1950-01-01 "] 사이에는 차이가 없습니다. 첫 번째는 두 개의 "패스"로 필터링을 수행하지만 최종 결과는 동일합니다. 수업 과정
한 번에 더 많은 일을합니다
$ Cat Laureate.json | groq-pretty '
{
"count": count (*. 수상자),
"Norwegians": *.laureates [borncountryCode == "no"] {FirstName},
}
'
{
"카운트": 928,
"노르웨이 인": [
{
"FirstName": "Ivar"
},
{
"FirstName": "lars"
},
…
]]
}
요약
운동 답변
운동 1
질문 1
질문 2
*[userID == 2]
질문 3
*[userId == 2 && 완성 == 거짓] 또는 *[userId == 2 &&! 완료]
질문 4
질문 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
질문 4
연습 3
질문 1
*.laureates [dis == "0000-00-00"]
질문 2
질문 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

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

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

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

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

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

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


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

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

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

Dreamweaver Mac版
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
