C++에서 JSON을 구문 분석하는 방법

How Parse Json C



이 튜토리얼의 목적은 JSON 데이터와 C++에서 JSON 데이터를 구문 분석하는 방법을 이해하는 것입니다. JSON 데이터, 개체, 배열, JSON 구문에 대해 논의한 다음 여러 작업 예제를 통해 C++에서 JSON 데이터의 구문 분석 메커니즘을 이해합니다.

JSON이란 무엇입니까?

JSON 구조화된 데이터를 조직화된 방식으로 저장하고 전송하기 위한 경량 텍스트 기반 표현입니다. JSON 데이터는 정렬된 목록과 키-값 쌍의 형태로 표현됩니다. JSON은 제이 에바 NS 크립트 또는 대상 N 오타. 이름에서 알 수 있듯이 JavaScript에서 파생되었습니다. 그러나 JSON 데이터는 대부분의 인기 있는 프로그래밍 언어에서 지원됩니다.







서버에서 웹 페이지로 데이터를 전송하는 데 자주 사용됩니다. 구조화된 데이터를 XML보다 JSON으로 표현하는 것이 훨씬 쉽고 깔끔합니다.



JSON 구문 규칙

다음은 JSON 구문 규칙입니다.



  1. JSON 데이터는 항상 키-값 쌍의 형태여야 합니다.
  2. JSON 데이터는 쉼표로 구분됩니다.
  3. 중괄호는 JSON 개체를 나타내는 데 사용됩니다.
  4. 대괄호는 JSON 배열을 나타내는 데 사용됩니다.

JSON 데이터란 무엇입니까?

JSON 데이터는 키-값 쌍의 형태로 표현됩니다. 이것은 다른 프로그래밍 언어의 사전 또는 해시와 유사합니다.





이름 : 드레이크

이것은 간단한 JSON 데이터의 예입니다. 여기서 키는 Name이고 Drake는 해당 값입니다. 키인 Name과 값인 Drake는 콜론으로 구분됩니다.



JSON 파일 확장자

JSON 데이터는 일반적으로 확장자가 .json인 파일에 저장됩니다. 예를 들어 직원 데이터를 저장하려면 파일 이름을 'employee.json'으로 지정하면 됩니다. 이것은 간단한 텍스트 파일입니다. 그런 다음 즐겨 사용하는 텍스트 편집기에서 이 JSON 파일을 열 수 있습니다.

JSON 객체

JSON 객체는 중괄호로 묶인 JSON 데이터일 뿐입니다. 다음은 샘플 JSON 객체입니다.

{
이름:드레이크,
직원 ID:23547a,
핸드폰: 23547,
학과:재원
}

JSON 객체는 여러 JSON 데이터를 포함할 수 있습니다. 각 JSON 데이터는 쉼표로 구분됩니다. JSON 데이터는 키-값 쌍으로 표시됩니다. 키인 Name과 값인 Drake는 콜론으로 구분됩니다. 위의 예에는 4개의 키-값 쌍이 있습니다. 첫 번째 키는 이름입니다. Drake는 이에 해당하는 값입니다. 마찬가지로 EmployeeID, Phone 및 Department는 다른 세 개의 키입니다.

JSON 배열

JSON 배열에는 쉼표로 구분된 여러 JSON 개체가 포함될 수 있습니다. JSON 배열은 대괄호로 묶입니다. JSON 배열의 예를 살펴보겠습니다.

'재학생':[
{'이름':'숀', '성':'갈색'},
{'이름':'드레이크', '성':'윌리암스'},
{'이름':'톰', '성':'밀러'},
{이름:베드로,:존슨}
]

이것은 JSON 배열의 예입니다. 여기에서 Students는 대괄호, 즉 배열로 묶여 있으며 4개의 JSON 객체를 포함합니다. 이러한 각 개체는 키-값 쌍의 형태로 표시되며 쉼표로 구분됩니다.

샘플 JSON 파일

이제 JSON 데이터, JSON 객체, JSON 배열을 이해했으므로 JSON 파일의 예를 살펴보겠습니다.

{
이름:,
:갈색,
학생 아이디: 21453,
학과:컴퓨터 Sc.,
과목:[수학,파이,화학]
}

C++에서 라이브러리 구문 분석:

C++에서 JSON 데이터를 구문 분석하기 위한 기본 솔루션은 없습니다. 그러나 C++에서 JSON 데이터를 구문 분석하는 여러 라이브러리가 있습니다. 이 기사에서는 C++에서 JSON 데이터를 구문 분석하기 위해 가장 많이 사용되는 두 가지 라이브러리를 살펴보겠습니다. 다음은 JSON 데이터 구문 분석을 위한 GitHub 링크입니다.

  1. https://github.com/nlohmann/json
  2. https://github.com/Tencent/rapidjson/

아래에 표시된 예제를 실행할 수 있도록 이러한 라이브러리를 다운로드할 수 있습니다.

이제 JSON 데이터, 객체, 배열 및 사용 가능한 구문 분석 라이브러리에 대한 기본적인 이해가 있습니다. 이제 C++에서 JSON 데이터를 구문 분석하는 몇 가지 예를 살펴보겠습니다.

  • 예-1: C++에서 JSON 구문 분석
  • 예-2: C++에서 JSON 구문 분석 및 직렬화
  • 예-3: C++에서 JSON 구문 분석

Example-1과 Example-2에서는 nlohmann 라이브러리를 사용할 것입니다. Example-3의 경우 RapidJSON 라이브러리를 사용합니다.

예-1: C++에서 JSON 구문 분석

이 예제 프로그램에서는 C++에서 JSON 데이터 값에 액세스하는 방법을 보여줍니다.

#포함하다
# 'json.hpp' 포함

json을 사용하여=노만::json;

정수기본()
{

// jd직원
json jd직원=
{
{'이름','숀'},
{'성','갈색'},
{'학생 아이디',21453},
{'학과','컴퓨터 Sc.'}
};

// 값에 접근
시간::fName=jd직원.('이름', '앗');
시간::이름=jd직원.('성', '앗');
정수아이디=jd직원.('학생 아이디', 0);
시간::부서=jd직원.('학과', '앗');

// 값을 출력
시간::비용 << '이름: ' <<fName<<시간::;
시간::비용 << '성: ' <<이름<<시간::;
시간::비용 << '학생 아이디: ' <<아이디<<시간::;
시간::비용 << '학과: ' <<부서<<시간::;

반품 0;
}

예-2: C++에서 JSON 구문 분석 및 직렬화

이 예제 프로그램에서는 C++에서 JSON을 구문 분석하고 직렬화하는 방법을 볼 것입니다. json::parse()를 사용하여 JSON 데이터를 구문 분석합니다.

#포함하다
# 'json.hpp' 포함
#포함하다

json을 사용하여=노만::json;

정수기본()
{
// 다음은 JSON 텍스트입니다.
텍스트[] =NS'(
{
'
': {
'
너비': 450,
'
': 30,
'
제목':'헬로월드',
'
isBiography': 거짓,
'
NumOfCopies': 4,
'
라이브러리ID': [2319, 1406, 3854, 987]
}
}
) '
;

// JSON을 파싱하고 직렬화하자
json j_complete=json::분석하다(텍스트);
시간::비용 <<시간::설정(4) <<j_완전<<시간::;
}

예-3: C++에서 JSON 구문 분석

이제 RapidJSON 라이브러리를 사용하여 JSON 문자열을 구문 분석하는 방법을 보여줍니다. RapidJSON은 원래 RapidXML에서 영감을 받았습니다. 이 예제 프로그램에서는 JSON 문자열을 DOM으로 구문 분석합니다. Document 유형의 mydoc을 선언한 다음 mydoc.parse() 메소드를 사용하여 JSON 문자열을 구문 분석합니다.

#포함하다
#include 'rapidjson/writer.h'
#include 'rapidjson/document.h'
#include 'rapidjson/stringbuffer.h'

네임스페이스 Rapidjson 사용;

정수기본()
{

상수 *json= '{'이름':'','':'갈색','empId': 21453,
'
학과':'컴퓨터 Sc.'}';

// JSON 문자열을 DOM으로 구문 분석
문서 mydoc;
마이닥.구문 분석(json);

// DOM을 문자열로
문자열 버퍼 버퍼;
작가<문자열 버퍼>작가(완충기);

마이닥.수용하다(작가);

// 출력을 출력
시간::비용 <<완충기.GetString() <<시간::;

반품 0;
}

결론

이 기사에서 우리는 간략하게 논의했습니다 JSON 데이터, 개체, 배열 및 구문. 우리가 알고 있듯이 C++에서 JSON 데이터 구문 분석을 위한 기본 솔루션은 없습니다. 우리는 C++에서 JSON 데이터를 구문 분석하기 위해 두 개의 다른 라이브러리를 사용했습니다. C++에서 JSON 데이터 구문 분석 메커니즘을 보여주기 위해 세 가지 다른 예를 살펴보았습니다. nlohmann 라이브러리와 비교할 때 RapidJSON은 작고 빠르며 메모리 친화적입니다.