C++조작 json 파일 및 jsoncpp 설정 상세 설명

머리말
json 파일 은 비교적 경량급 의 파일 로 형식 이 간단 하고 사용 하기에 편리 하 다.정 보 를 저장 하 는 것 은 다른 방식 에 비해 자신 만 의 장점 이 있다.
오늘 여러분 께 공 유 된 것 은 어떻게 C++를 이용 하여 json 파일 을 조작 하 는 지 입 니 다.
jsoncpp 라 이브 러 리 를 어떻게 사용 하 는 지 알 고 있다 면 첨부 를 보지 않 아 도 됩 니 다.처음 사용 하면 마지막 까지 환경 을 설정 한 다음 에 조작 하 십시오. 
json 파일 소개
1.json 파일
JSON(JavaScript Object Notation,JS 대상 약보)은 경량급 데이터 교환 형식 이다.이 는 ECMAScript(유럽 컴퓨터 협회 가 제정 한 js 규범)의 키 집합 을 바탕 으로 프로 그래 밍 언어 에 완전히 독립 된 텍스트 형식 으로 데 이 터 를 저장 하고 표시 합 니 다.간결 하고 뚜렷 한 차원 구 조 는 JSON 을 이상 적 인 데이터 교환 언어 로 만 들 었 다.사람 이 읽 고 쓰기 쉬 우 며 기계 적 으로 해석 하고 생 성 하기 쉬 우 며 네트워크 전송 효율 도 효과적으로 향상 시킨다.
2.json 과 다른 저장 데이터 방식 비교
왜 제 이 슨 파일 을 써 야 합 니까?
우리 가 가장 자주 사용 하 는 데 이 터 를 저장 하 는 방식 은 매우 많다.예 를 들 어 txt 파일 을 이용 하여 저장 하고 xml 를 이용 하여 저장 하 며 워드 를 이용 하여 엑셀 을 이용 하여 저장 하 는 것 이다.만약 에 우리 가 요구 가 비교적 높 으 면 데이터 재 고 를 사용 할 수 있다.
txt,워드 에 비해 json 형식 이 더욱 명확 하고 중요 한 정 보 를 얻 는 것 이 편리 합 니 다.
xml 에 비해 json 형식 은 더욱 간결 하고 같은 파일 을 저장 하 며 사용 하 는 메모리 가 더 작 습 니 다.
엑셀 에 비해 제 이 슨 은 문자 류 파일 을 저장 하 는 데 더욱 적합 하 다.엑셀 은 비교적 간단 한 데이터베이스 에 해당 한다.
데이터 베이스 에 비해 제 이 슨 이 더욱 편리 하고 데이터 베 이 스 는 우리 가 설정 을 하고 소프트웨어 를 설치 해 야 한다.제 이 슨 은 직접 사용 할 수 있다.
2.C++조작 json 파일
1.jsoncpp 라 이브 러 리 다운로드
여러분 은 스스로 인터넷 에 접속 하여 jsoncpp 라 이브 러 리 를 다운로드 할 수 있 습 니 다.
2.C++문자열 에서 json 읽 기
json 양식 이 비교적 많 습 니 다.여기 서 두 가 지 를 공유 합 니 다.하 나 는 비교적 직접적 이 고 간단 하 며 하 나 는 약간 복잡 합 니 다.
1.심 플 제 이 슨 스타일
다음 json 데 이 터 를 저장 할 문자열 을 정의 합 니 다.

{
    "name" : "shuiyixin",
    "age" : "21",
    "sex" : "man"
}
읽 기 코드 는 다음 과 같 습 니 다:

void readStrJson()
{
	//     
	const char* str =
		"{\"name\":\"shuiyixin\",\"age\":\"21\",\"sex\":\"man\"}";
 
 
	Json::Reader reader;
	Json::Value root;
 
	//           
	if (reader.parse(str, root))
	{
		string name = root["name"].asString();
		int age = root["nomen"].asInt();
		string sex = root["sex"].asString();
		cout << name + "," << age << "," << sex <<  endl;
	}
 
}
2.복잡 한 제 이 슨 스타일
복잡 하 다 는 것 은 제 이 슨 안에 여러 층 으로 나 뉘 는데 위 에 있 는 간단 한 것 은 한 층 밖 에 없다 는 것 이다.제 이 슨 데 이 터 는 다음 과 같다.

{
    "name":"shuiyixin",
    "major":[
    {
        "AI":"MachineLearning"
    },
    {
        "AI":"DeepLearning"
    },
    {
        "AI":"ComputerVision"
    }]
}
읽 기 코드 는 다음 과 같 습 니 다:

void readStrProJson()
{
	string strValue = "{\"name\":\"shuiyixin\",\"major\":[{\"AI\":\"MachineLearning\"},{\"AI\":\"DeepLearning\"},{\"AI\":\"ComputerVision\"}]}";
	Json::Reader reader;
	Json::Value value;
	if (reader.parse(strValue, value))
	{
		string out = value["name"].asString();
		cout << out << endl;
		const Json::Value arrayObj = value["major"];
		for (unsigned int i = 0; i < arrayObj.size(); i++)
		{
			out = arrayObj[i]["AI"].asString();
			cout << out<<endl;
		}
	}
}
3.C++파일 에서 json 읽 기
문자열 에서 json 파일 을 읽 는 것 은 json 파일 을 알 수 있 도록 하기 위해 서 입 니 다.우 리 는 결국 파일 에서 읽 어야 합 니 다.
이 읽 은 제 이 슨 파일 은 아래 의 제 이 슨 파일 을 통 해 스스로 만 들 수 있 습 니 다.
다음 json 파일 을 예 로 들 면:

{
   "age" : 21,
   "friends" : {
      "friend_age" : 21,
      "friend_name" : "ZhaoWuxian",
      "friend_sex" : "man"
   },
   "hobby" : [ "sing", "run", "Tai Chi" ],
   "name" : "shuiyixin",
   "sex" : "man"
}
읽 기 코드 는 다음 과 같 습 니 다:

void readFileJson()
{
	Json::Reader reader;
	Json::Value root;
 
	//      ,       demo.json    
	ifstream in("demo.json", ios::binary);
 
	if (!in.is_open())
	{
		cout << "Error opening file
"; return; } if (reader.parse(in, root)) { // string name = root["name"].asString(); int age = root["age"].asInt(); string sex = root["sex"].asString(); cout << "My name is " << name << endl; cout << "I'm " << age << " years old" << endl; cout << "I'm a " << sex << endl; // string friend_name = root["friends"]["friend_name"].asString(); int friend_age = root["friends"]["friend_age"].asInt(); string friend_sex = root["friends"]["friend_sex"].asString(); cout << "My friend's name is " << friend_name << endl; cout << "My friend's sex is "<<friend_sex << endl; cout << "My friend is " << friend_age << " years old" << endl; // cout << "Here's my hobby:" << endl; for (unsigned int i = 0; i < root["hobby"].size(); i++) { string ach = root["hobby"][i].asString(); cout << ach << '\t'; } cout << endl; cout << "Reading Complete!" << endl; } else { cout << "parse error
" << endl; } in.close(); }
4.C++json 파일 쓰기
읽 는 것 외 에 우 리 는 자주 json 파일 을 쓸 것 이다.json 파일 은 다음 과 같다.

{
   "age" : 21,
   "friends" : {
      "friend_age" : 21,
      "friend_name" : "ZhaoWuxian",
      "friend_sex" : "man"
   },
   "hobby" : [ "sing", "run", "Tai Chi" ],
   "name" : "shuiyixin",
   "sex" : "man"
}
기록 코드 는 다음 과 같 습 니 다:

void writeFileJson()
{
	//     
	Json::Value root;
 
	//       
	root["name"] = Json::Value("shuiyixin");
	root["age"] = Json::Value(21);
	root["sex"] = Json::Value("man");
 
	//     
	Json::Value friends;
 
	//       
	friends["friend_name"] = Json::Value("ZhaoWuxian");
	friends["friend_age"] = Json::Value(21);
	friends["friend_sex"] = Json::Value("man");
 
	//           
	root["friends"] = Json::Value(friends);
 
	//      
	root["hobby"].append("sing");
	root["hobby"].append("run");
	root["hobby"].append("Tai Chi");
 
	//      
	//cout << "FastWriter:" << endl;
	//Json::FastWriter fw;
	//cout << fw.write(root) << endl << endl;
 
	//      
	cout << "StyledWriter:" << endl;
	Json::StyledWriter sw;
	cout << sw.write(root) << endl << endl;
 
	//       
	ofstream os;
	os.open("demo.json", std::ios::out | std::ios::app);
	if (!os.is_open())
		cout << "error:can not find or create the file which named \" demo.json\"." << endl;
	os << sw.write(root);
	os.close();
 
}
주의해 야 할 것 은:
1.기록 할 파일 이 존재 하지 않 으 면 자동 으로 파일 을 만 듭 니 다.
2.파일 이 존재 한다 면 기록 과정 은 파일 에 있 는 데 이 터 를 덮어 쓰 지 않 고 새로운 데 이 터 를 기 존 데이터 뒤에 씁 니 다.
5.주 함수
모든 기능 모듈 을 다 썼 습 니 다.나머지 는 주 함수 입 니 다.

#include <string>  
#include <json.h>
#include <iostream>  
#include <fstream>  
using namespace std;
 
void readStrJson(); //       JSON  
void readStrProJson(); //       JSON(     )  
void readFileJson(); //      JSON 
void writeFileJson();  //      JSON    
 
int main(int argc, char *argv[])
{
	writeFileJson(); //  json
 
	readFileJson(); //      JSON 
 
	cout << "

"; readStrJson(); // json cout << "

"; readStrProJson();// JSON( ) system("pause"); return 0; }
 첨부:jsoncpp 라 이브 러 리 설정
jsoncpp 라 이브 러 리 설정 은 opencv 설정 원리 와 같 습 니 다.아래 의 튜 토리 얼 을 보 실 수 있 습 니 다.
opencv 설정(win 10+VS 2015+OpenCV 3.1.0):여 기 를 클릭 하여 다운로드
그러나 jsoncpp 라 이브 러 리 의 내용 이 비교적 적 고 설정 이 opencv 만큼 번 거 롭 지 않 습 니 다.
1.스트레스 해소 및 이동
먼저 라 이브 러 리 압축 을 풀 고 아래 두 폴 더 를 만 든 항목 아래로 복사 합 니 다.
 
라 이브 러 리 압축 해제

만 든 항목 에 두 개의 폴 더 를 복사 합 니 다.
 2.속성 설정
디 버 깅 을 클릭 하고 항목 속성 을 클릭 합 니 다.
 
클릭 하여 디 버 깅->항목 속성
 
VC+디 렉 터 리 에 포 함 된 디 렉 터 리 를 선택 하고 수정 을 누 르 십시오.
 
include 폴 더 의 json 파일 경 로 를 여기에 복사 하고 저장 합 니 다.
 3.설정 항목
src 폴 더 아래 libjson 폴 더 의 cpp 파일 을 원본 파일 에 추가 합 니 다:
 
src 폴 더 찾기->libjson 폴 더->모든 cpp 파일 을 복사 합 니 다.
 
원본 파일 에 추가
그리고 사용 할 수 있어 요.
총결산
C++조작 json 파일 및 jsoncpp 설정 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++조작 json 파일 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기