[javascript] XQuery / XPath에 해당하는 JSON이 있습니까?
다음과 같이 복잡한 JSON 배열 및 해시에서 항목을 검색 할 때
[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [
// etc.
}]
}
]
항목을 찾는 데 사용할 수있는 쿼리 언어가 in [0].objects where id = 3
있습니까?
답변
답변
JSONQuery는 JSONPath의 상위 집합이므로 dojo에서 대체 한다고 생각 합니다 . 그런 다음 RQL도 있습니다.
Dojo 문서에서 :
JSONQuery는 보안, 사용 편의성 및 필터링, 재귀 적 검색, 정렬, 매핑, 범위 선택 및 와일드 카드 문자열 비교 및 다양한 연산자를 사용한 유연한 식을 포함한 포괄적 인 데이터 쿼리 도구를위한 추가 기능을 갖춘 확장 된 JSONPath 버전입니다.
JSONselect 는 질문에 대한 또 다른 관점 (XPath가 아닌 CSS 선택기와 유사)이 있으며 JavaScript 구현이 있습니다.
답변
내가 알고있는 다른 대안은
- JSONiq 사양은 두 가지 하위 유형 언어를 지정합니다. 하나는 XML 세부 정보를 숨기고 JS와 유사한 구문을 제공하는 것과 다른 하나는 JSON 생성자와 같은 XQuery 구문을 강화하는 것입니다. Zorba 는 JSONiq을 구현합니다.
- MarkLogic 위에 구축 된 Corona 는 XML, JSON, 텍스트 및 이진 콘텐츠를 저장, 관리 및 검색하기위한 REST 인터페이스를 제공합니다.
- MarkLogic 6 이상은 즉시 사용 가능한 Corona와 유사한 REST 인터페이스를 제공합니다.
- MarkLogic 8 이상은 XQuery 및 서버 측 JavaScript 환경 모두에서 기본적으로 JSON을 지원합니다. XPath를 적용 할 수 있습니다.
HTH.
답변
JSON 데이터 탐색 / 필터링에 대한 현재 옵션 중 일부를 요약하고 몇 가지 구문 예제를 제공합니다.
-
JSPath
.automobiles{.maker === "Honda" && .year > 2009}.model
-
json : select () (CSS 선택기에서 더 많은 영감을 얻음)
.automobiles .maker:val("Honda") .model
-
JSONPath (XPath에서 더 많은 영감을 얻음)
$.automobiles[?(@.maker='Honda')].model
JSPath가 가장 멋지다고 생각하므로 AngularJS + CakePHP 앱과 통합하려고합니다.
(나는 원래이 답변을 다른 스레드 에 게시 했지만 여기에서도 유용하다고 생각했습니다.)
답변
JSPath를 사용해보십시오
JSPath는 JSON 문서 내에서 데이터를 탐색하고 찾을 수있는 DSL (Domain-Specific Language)입니다. JSPath를 사용하면 JSON 항목을 선택하여 포함 된 데이터를 검색 할 수 있습니다.
XML 용 XPath와 같은 JSON 용 JSPath
Node.js와 최신 브라우저 모두에 최적화되어 있습니다.
답변
프로세서가 JSON 지원을 제공하는 경우 XQuery를 사용하여 JSON을 쿼리 할 수 있습니다. BaseX를 사용하여 “id”= 1 인 객체를 찾는 간단한 방법입니다.
json:parse('[
{ "id": 1, "name": "One", "objects": [
{ "id": 1, "name": "Response 1", "objects": [ "etc." ] }
]}
]')//value[.//id = 1]
답변
어떤 종류의 쿼리 언어가 있습니까?
JQ는 정의 J 아들 의 Q JSONPath 매우 유사하다 uery 언어 – 참조 https://github.com/stedolan/jq/wiki/For-JSONPath-users
… [[]] id = 3 인 [0] .objects에서 항목을 찾을 수 있습니까?
나는 이것이 의미한다고 가정합니다 : 객체의 위치에 관계없이 id == 3 인 지정된 키 아래의 모든 JSON 객체를 찾으십시오. 해당 jq 쿼리는 다음과 같습니다.
.[0].objects | .. | objects | select(.id==3)
어디에 “|” 파이프 연산자 (명령 쉘 파이프에서와 같이)이며 세그먼트 “.. | objects”는 “개체의 위치에 관계없이”에 해당합니다.
jq의 기본 사항은 대체로 명백하거나 직관적이거나 최소한 매우 간단하며, 명령 쉘 파이프에 익숙하다면 나머지 대부분은 쉽게 찾을 수 있습니다. jq FAQ 에는 튜토리얼 등에 대한 포인터가 있습니다.
jq 프로세서는 CRUD 연산을 지원한다는 점에서도 SQL과 비슷하지만 jq 프로세서는 입력을 덮어 쓰지 않습니다. jq는 또한 JSON 엔티티의 스트림을 처리 할 수 있습니다.
JSON 지향 쿼리 언어를 평가할 때 고려해야 할 다른 두 가지 기준은 다음과 같습니다.
- 정규식을 지원합니까? (jq 1.5는 PCRE 정규식을 포괄적으로 지원합니다)
- 튜링 완료입니까? (네)