본문 바로가기

프로그래밍/아두이노[Arduino]&라즈베리파이[Raspberry Pi]

[ArduinoJson]아두이노에서 Json 사용법 정리



 

아두이노 툴-라이브러리 관리에서 바로 적용이 가능합니다.

 

비슷한 라이브러리가 많아 띄어쓰기와 문자를 자세히 보시기 바랍니다.

 

Json으로 검색하여 ArduinoJson을 설치합니다.

 

 

추가적으로 확인사항이 있으시다면 아래의 링크로 접속해서 확인하시면 됩니다.

 

ArduinoJson: Efficient JSON serialization for embedded C++

ArduinoJson is a JSON library for Arduino, IoT, and any embedded C++ project. It supports JSON serialization, JSON deserialization, MessagePack, streams, and fixed memory allocation. It has a simple API, it’s easy to use, and it’s trusted by thousands

arduinojson.org

 

 

최상단에 헤더파일을 추가합니다.

#include "ArduinoJson.h"

 

역직렬화

 

JSON 문서를 역직렬화하고 스택에 저장

 

  StaticJsonDocument<200> doc; // <- 예상 보다 조금 더 많게 스택 설정.
  
  //데이터 넣기
  String json = "{'name':'홍길동'}";
  deserializeJson(doc, json);

  //아래와 같이 뽑아서 사용
  String temp_name = doc["name"];
  Serial.println(temp_name);

 

직렬화

 

힙에 저장된 JSON 문서를 직렬화

  DynamicJsonDocument doc(200); //<- 예상 보다 조금 더 많게 스택 설정.
  doc["name"] = "홍길동";
  
  String jsonData="";
  serializeJson(doc, jsonData); // => {"name":"홍길동"}
  Serial.println(jsonData);

 

시리얼에 바로 출력도 가능합니다.

  DynamicJsonDocument doc(200); //<- 예상 보다 조금 더 많게 스택 설정.
  doc["name"] = "홍길동";
  serializeJson(doc, Serial); // => {"name":"홍길동"} 시리얼에 출력

 

 

다음은 관련된 간단한 함수를 정리해 보았습니다.

 

Json 객체로 변환

JsonObject jsonObject = doc.to<JsonObject>();

 

 

여러 개 입력 시 다음과 같이 입력합니다.

  doc["name"] = "홍길동";
  doc["age"] ="20";
  doc["email"] ="KillDong";

 

 

배열로 사용 시 다음과 같이 입력합니다.

  DynamicJsonDocument doc(200); //<- 예상 보다 조금 더 많게 스택 설정.
  doc.add("name");
  doc.add("age");
  doc.add("email");

 

 

clear() 함수로 내용을 모두 지울 수 있습니다.

 doc.clear();

 

 

특정 키의 데이터만 지울 수 있습니다.

 

  doc["name"] = "홍길동";
  doc["age"] ="20";
  doc["email"] ="KillDong";
  doc.remove("email");

 

특정 키가 존재하는지 확인합니다.

//true 키가 문서에 있는 경우
//false 키가 문서에 없는 경우

bool hasName=doc.containsKey("name");

 

 

사이즈도 추출도 가능합니다.

  doc["name"] = "홍길동";
  doc["age"] ="20";
  doc["email"] ="KillDong";

  int size = doc.size();
  Serial.println(doc.size());
  
  // => 3

 

여러 depth로 입력하는 방법입니다.

  //Object
  DynamicJsonDocument doc(200); //<- 예상 보다 조금 더 많게 스택 설정.
  JsonObject wifi  = doc.createNestedObject("wifi");
  wifi["SSID"] = "iptime";
  
  //Array
  DynamicJsonDocument doc(200); //<- 예상 보다 조금 더 많게 스택 설정.
  JsonArray  wifi  = doc.createNestedArray("wifi");
  wifi.add("iptime");
  wifi.add("next");

 

 

depth(깊이) 사이즈 추출도 가능합니다.

Serial.println(doc.nesting());

 

특정 키의 값을 변경할 때는 다음과 같이 데이터를 다시 넣으면 됩니다.

  doc["name"] = "홍길동";
  doc["age"] = "20";
  doc["email"] ="KillDong";
  doc["age"] = "30";

 

간단하게 아두이노에서 Json 사용하는 법을 다뤄 보았습니다.

 

감사합니다.