JSON용 스트리밍 API가 있나요?
JSON을 해석하는 방법은 DOM뿐입니까?
일부 JSON 파서는 증분("파서") 파서를 제공합니다.Java의 경우 json.org 페이지에서 적어도 다음 파서가 이러한 인터페이스를 제공합니다.
- 잭슨(풀 인터페이스)
- Json-simple(SAX 스타일의 푸시 인터페이스)
사실 많은 JSON 파서가 이 단순한 로우 레벨 인터페이스를 제공하지 않는 것은 좀 이상합니다.결국 이미 로우 레벨의 파싱을 실장할 필요가 있기 때문에 공개하지 않을 수 없습니다.
편집(2011년 6월):Gson도 자체 스트리밍 API(gson 1.6 포함)를 가지고 있습니다.
DOM은 파서가 문서 전체를 한 번에 읽고 작업하는 것을 의미한다고 생각합니다.오늘날 DOM은 XML을 암시하는 경향이 있지만 IMO는 정확한 추론이 아닙니다.
따라서 "예"와 "아니오" 스트리밍 API가 있습니다.DOM만이 유일한 방법은 아닙니다.즉, JSON 문서를 스트림으로 처리하는 것은 많은 오브젝트가 단순한 필드/값 쌍이 아니라 다른 오브젝트를 값으로 포함하고 있으며, 이를 처리하기 위해 구문 분석해야 하며, 이는 재귀적인 것으로 끝나는 경향이 있기 때문에 문제가 됩니다.그러나 간단한 메시지의 경우 스트림/이벤트 기반 파서를 사용하여 유용한 작업을 수행할 수 있습니다.
JSON용 풀 이벤트 파서를 작성했습니다(1개 클래스, 약 700줄).하지만 제가 본 다른 대부분의 것들은 문서 지향적입니다.파서 위에 쌓은 레이어 중 하나는 문서 리더로, 약 30 LOC가 소요되었습니다.지금까지 파서를 문서 로더로서 사용해 본 적은 없습니다(위의 이유).
인터넷을 검색하면 JSON의 Pull과 Push 기반의 Parser를 찾을 수 있을 것입니다.
EDIT: 다운로드하기 위해 파서를 사이트에 올렸습니다.작업용 컴파일 가능 클래스 및 완전한 예가 포함되어 있습니다.
EDIT2: JSON 웹사이트도 보실 수 있습니다.
StefanB가 설명한 바와 같이 http://lloyd.github.com/yajl/은 JSON 스트림을 해석하기 위한 C 라이브러리입니다.이 페이지에는 다른 언어에 관한 많은 래퍼도 기재되어 있습니다.
- yajl-ruby - YAJL용 루비 바인딩
- yajl-objc - YAJL용 Objective-C 바인딩
- YAJL IO 바인딩(IO 언어용)
- 파이썬 바인딩은 두 가지 맛이 있습니다. py-yajl OR 야즐피
- yajl-module - node.module 바인딩(github에 대한 바인딩).
- lua-yajl - lua 바인딩
- ooc-yajl - ooc 결합
- yajl-tcl - TCL 바인딩
일부는 스트리밍을 허용하지 않을 수 있지만, 대부분은 스트리밍을 허용하고 있습니다.
순수 javascript와 node.js와 브라우저에서 모두 실행되는 라이브러리를 사용하려면 clearinet을 사용해 보십시오.
https://github.com/dscape/clarinet
파서는 이벤트 기반이며 스트리밍이기 때문에 대용량 파일을 처리할 수 있습니다.API는 sax에 매우 가깝고 코드는 sax-js에서 포크됩니다.
면책사항:나 자신의 프로젝트를 제안하는 거야.
저는 자바스크립트로 스트리밍 JSON 파서를 유지하고 있으며, 이 파서는 SAX와 DOM의 몇 가지 기능을 결합한 것입니다.
이 아이디어는 스트리밍 파싱을 허용하지만 프로그래머가 원시 SAX와 같은 다양한 이벤트를 청취할 필요는 없습니다.저는 색스를 좋아하지만 대부분의 사람들이 필요로 하는 수준보다 낮은 편입니다.JSONPath 패턴을 등록하면 JSON 스트림에서 대상 노드를 수신할 수 있습니다.
코드는 여기 Github에 있습니다.
LitJSON은 스트리밍 스타일의 API를 지원합니다.매뉴얼 인용:
"일부 개발자에게 익숙한 JSON 데이터를 처리하는 대체 인터페이스로 스트림과 같은 방식으로 데이터를 읽고 쓸 수 있는 클래스를 사용할 수 있습니다.는 「」입니다.JsonReader
★★★★★★★★★★★★★★★★★」JsonWriter
.
두 이 라이브러리의 있습니다 '이 두 가지 타입은 이 라이브러리의 기초가 됩니다.JsonMapper
그 되어 있기 할 수 .SON의 저레벨 프로그래밍 인터페이스라고 생각할 수 있습니다.」
특히 Python을 찾고 있다면 ijson이 Python을 지원한다고 주장합니다.그러나 파서일 뿐이므로 스트림으로 json을 생성할 수 있는 Python은 전혀 발견하지 못했습니다.
C++의 경우 스트리밍 방식으로 해석과 생성을 모두 지원한다고 주장하는 rapidjson이 있습니다.
여기 노드가 있습니다.JSON 스트림 해석 및 처리를 위한 JS NPM 라이브러리:https://npmjs.org/package/JSONStream
Python의 경우 ijson의 대체 수단(분명히 가볍고 효율적임)은 jsaone이다(jsaone이 약 3배 더 빠르다는 것을 보여주는 대략적인 벤치마크에 대해서는 이 링크를 참조).
부인: 저는 jsaone의 저자입니다. 제가 만든 테스트는 매우 기초적입니다.틀렸다는 걸 증명해 주면 고맙겠어!
질문 제목: C의 JSON 파서 라이브러리 YAJL:
YAJL은 파싱 재기동에 필요한 모든 상태를 기억합니다.이를 통해 디스크 또는 네트워크에서 데이터를 읽을 때 점진적으로 구문 분석을 수행할 수 있습니다.
따라서 yajl을 사용하여 JSON을 해석하는 것은 데이터 처리 스트림으로 간주할 수 있습니다.
두 번째 질문에 대한 답변으로, 아니요, 많은 언어에 JSON 파서가 있습니다.PHP, Java, C, Ruby 및 기타 많은 기능.Google에서 선택한 언어에 "JSON 파서"를 추가하세요.
언급URL : https://stackoverflow.com/questions/444380/is-there-a-streaming-api-for-json
'programing' 카테고리의 다른 글
Spring Boot 응용 프로그램에서 Servlet 필터 실행 순서를 정의하는 방법 (0) | 2023.02.26 |
---|---|
Oracle에서 "<>"의 의미 (0) | 2023.02.26 |
JSON에서의 통화값 포맷의 기준은 무엇입니까? (0) | 2023.02.21 |
오류: [$compile:nonassign] 지시문 'myFacebook'과 함께 사용되는 표현식 'undefined'는 할당할 수 없습니다. (0) | 2023.02.21 |
Woocommerce - php를 사용하여 주문 정보를 가져옵니다. (0) | 2023.02.21 |