JSON 쿼리를위한 (거의) SQL 또는 XQuery와 유사한 언어가 있습니까?
“X의 모든 값이 Y> 3″과 같은 쿼리에 쉽게 응답하거나 일반적인 SUM / COUNT 유형 작업을 수행하는 것과 같은 쿼리에 JSON에 잘 매핑되는 매우 작은 데이터 세트를 생각하고 있습니다.
완전히 구성된 예제로 다음과 같습니다.
[{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]
SUM(X) WHERE Y > 0 (would equate to 7)
LIST(X) WHERE Y > 0 (would equate to [3,4])
나는 이것이 클라이언트 측과 서버 측 모두에서 작동하여 결과가 적절한 언어 별 데이터 구조로 변환되거나 JSON으로 유지 될 것이라고 생각합니다.
빠른 인터넷 검색은 사람들이 그것에 대해 생각하고 몇 가지 ( JAQL )를 구현했다고 제안 하지만 표준 사용법이나 라이브러리 세트가 아직 등장하지 않은 것 같습니다. 각 기능은 자체적으로 구현하는 것이 쉽지 않지만 누군가가 이미 올바르게 수행 한 경우 바퀴를 다시 발명하고 싶지 않습니다.
어떤 제안?
편집 : 이것은 실제로 나쁜 생각 일 수도 있고 JSON이 너무 일반적인 형식 일 수도 있습니다. 필요에 따라 합산 등을 직접 수행하는 대신 쿼리 언어를 원하는 이유는 빌드하기를 희망하기 때문입니다. 사용자 입력에 따라 동적으로 쿼리합니다. “우리는 SQL이 필요하지 않고 필요한 함수를 작성할 수있다”는 주장을 좋아한다. 결국 손이 닿지 않거나 더 많은 SQL을 밀어 넣을 때 자신 만의 SQL 버전을 작성하게됩니다. (좋아, 나는 그것이 약간 바보 같은 주장이라는 것을 알고 있지만, 당신은 아이디어를 얻는다.)
답변
물론 어떻습니까 :
그들은 모두 약간의 작업이 진행되는 것처럼 보이지만 어느 정도 작동합니다. 또한 XPath 및 XQuery와 개념적으로 유사합니다. XML과 JSON에는 다른 개념적 모델이 있지만 (hierarchic와 객체 / 구조).
2015 년 9 월 편집 : 실제로 JSON 콘텐츠를 매우 간단하고 효율적으로 통과 할 수있는 JSON 포인터 표준이 있습니다. 공식적으로 지정 될뿐만 아니라 많은 JSON 라이브러리에서도 지원됩니다. 따라서 표현력이 제한되어 있기 때문에 쿼리 언어 자체로 간주 될 수도 있고 그렇지 않을 수도 있지만 실제 실제 유용한 표준이라고 부릅니다.
답변
jLinq라는 작업중 인 프로젝트를 추천 합니다. 의견을 찾고 있으므로 귀하의 의견을 듣고 싶습니다.
LINQ에서와 비슷한 쿼리를 작성할 수 있다면 …
var results = jLinq.from(records.users)
//you can join records
.join(records.locations, "location", "locationId", "id")
//write queries on the data
.startsWith("firstname", "j")
.or("k") //automatically remembers field and command names
//even query joined items
.equals("location.state", "TX")
//and even do custom selections
.select(function(rec) {
return {
fullname : rec.firstname + " " + rec.lastname,
city : rec.location.city,
ageInTenYears : (rec.age + 10)
};
});
완전히 확장 가능합니다!
설명서가 아직 진행 중이지만 온라인으로 계속 시도 할 수 있습니다.
답변
업데이트 : XQuery 3.1 은 XML 또는 JSON 중 하나 또는 둘 다를 쿼리 할 수 있습니다. 그리고 XPath 3.1 도 가능합니다.
목록이 늘어나고 있습니다.
답변
jmespath는 아주 쉽고 잘 작동합니다. http://jmespath.org/
Amazon은 AWS 명령 줄 인터페이스에서 사용하고 있으므로 매우 안정적입니다.
답변
JQ는 A는 J 아들 Q의 주로를 통해 브라우저에서도 사용할 수 프로그래밍 언어 (자바, Node.js를, PHP, …)과의 광범위한 명령 줄뿐만 바인딩으로 구성 uery 언어, JQ-웹 .
다음은 원래 질문을 기반으로 한 몇 가지 예입니다.이 JSON은 예제입니다.
[{"x": 2, "y": 0}}, {"x": 3, "y": 1}, {"x": 4, "y": 1}]
합 (X) WYE> 0 (7과 같음)
map(select(.y > 0)) | add
LIST (X) 여기서 Y> 0 ([3,4]와 동일)
map(.y > 0)
jq 구문은 JSON 구문을 확장합니다
모든 JSON 표현식은 유효한 jq 표현식이며 and [1, (1+1)]
{ “a”: (1 + 1)}`와 같은 표현식 은 jq가 JSON 구문을 확장하는 방법을 보여줍니다.
더 유용한 예는 jq 표현식입니다.
{a,b}
JSON 값이 주어지면로 {"a":1, "b":2, "c": 3}
평가됩니다 {"a":1, "b":2}
.
답변
내장 된 array.filter()
메소드 는 이러한 소위 자바 스크립트 쿼리 라이브러리를 대부분 사용하지 않습니다.
간단한 비교, startsWith 등 내가 상상할 수있는 한 많은 조건을 대리자 안에 넣을 수 있습니다. 테스트하지는 않았지만 내부 컬렉션을 쿼리하기 위해 필터를 중첩 할 수도 있습니다.