C에서 JSON을 구문 분석하는 좋은 방법을 찾으려고합니다. 정말 큰 라이브러리 나 아무것도 필요하지 않습니다. 최소한의 기능을 갖춘 작고 가벼운 것이지만 좋은 문서입니다.
나를 가리킬 수있는 사람이 있습니까?
C에서 JSON을 구문 분석하는 좋은 방법을 찾으려고합니다. 정말 큰 라이브러리 나 아무것도 필요하지 않습니다. 최소한의 기능을 갖춘 작고 가벼운 것이지만 좋은 문서입니다.
나를 가리킬 수있는 사람이 있습니까?
{, [, ], }, ,, ", 및 백 슬래시. 그들은 유니 코드 이스케이프 시퀀스를 당신에게 맡길 수도 있고 안 할 수도 있고, 숫자가 허용 가능한 유니 코드 범위 내에 있는지 등을 확인하기 위해 당신에게 맡길 수도 있습니다. 그런 다음 임의의 JSON을 트리로 파싱하는 것과 알려진 JSON을 C로 파싱하는 것 사이에는 큰 차이가 있습니다. 구조체.
답변:
Json은 시작하기에 큰 언어가 아니므로 라이브러리는 작을 가능성이 높습니다 (적어도 Xml 라이브러리보다 작음).
Json.org에 링크 된 수많은 C 라이브러리가 있습니다 . 아마도 그들 중 하나가 당신을 위해 잘 작동 할 것입니다.
Jsmn은 매우 최소한이며 작업 할 수있는 기능은 두 가지뿐입니다.
/* Allows escaped symbol \uXXXX */... case 'u':.../* TODO */
NXJSON 은 모든 기능을 갖추고 있지만 매우 작은 (최대 400 줄의 코드) JSON 파서로 API를 사용하기 쉽습니다.
const nx_json* json=nx_json_parse_utf8(code);
printf("hello=%s\n", nx_json_get(json, "hello")->text_value);
const nx_json* arr=nx_json_get(json, "my-array");
int i;
for (i=0; i<arr->length; i++) {
const nx_json* item=nx_json_item(arr, i);
printf("arr[%d]=(%d) %ld\n", i, (int)item->type, item->int_value);
}
nx_json_free(json);
Jansson을 볼 수 있습니다
웹 사이트는 다음과 같이 설명합니다. Jansson은 JSON 데이터를 인코딩, 디코딩 및 조작하기위한 C 라이브러리입니다. 특징 :
jsmn속도 [1] 때문에 사용하고 싶었지만 인코딩을 지원하지 않습니다. 또한 Jansson은 사용하기 정말 쉽습니다. --- [1] translate.google.it/…
작업 프로젝트에 JSON-C 를 사용 했으며 권장합니다. 경량이며 오픈 라이선스로 출시됩니다.
문서는 배포에 포함되어 있습니다. 기본적으로 *_addJSON 객체를 생성하는 *_put함수, 메모리를 해제하는 동등한 함수, 유형 및 출력 객체를 문자열 표현으로 변환하는 유틸리티 함수가 있습니다.
라이선스를 통해 프로젝트에 포함 할 수 있습니다. 우리는 이것을 메인 빌드와 연결된 정적 라이브러리로 JSON-C를 컴파일하는 방식으로 사용했습니다. 이렇게하면 종속성 (Xcode 설치 제외)에 대해 걱정할 필요가 없습니다.
JSON-C는 OS X (x86 Intel) 및 Linux (x86 Intel)에서 우연없이 우리를 위해 구축되었습니다. 프로젝트를 이식 할 수 있어야한다면 시작하는 것이 좋습니다.
임의의 JSON 구조를 파싱해야합니까, 아니면 애플리케이션에 특정한 데이터 만 파싱해야합니까? 후자의 경우 JSON 키를 값에 매핑하는 해시 테이블 / 맵 구조를 생성 할 필요가 없으므로 훨씬 가볍고 효율적으로 만들 수 있습니다. 대신 데이터를 구조체 필드 등에 직접 저장할 수 있습니다.