1. 程式人生 > >Arduino處理JSON資料

Arduino處理JSON資料

1.資料

2.JSON總結

JSON的結構

{
  "sensor": "gps",
  "time": 1351824120,
  "data": [
    48.75608,
    2.302038
  ]
}

微控制器字串

char json[]="{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}";

JSON
物件是一個無序的名稱/值對集合。一個物件以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號);“名稱/值對”之間使用“,”(逗號)分隔。

名稱/值(collection):名稱和值之間使用:隔開,一般的形式是:

{name:value}

值的有序列表(Array):一個或者多個值用,分割槽後,使用[,]括起來就形成了這樣的列表,形如:

[collection, collection]

github上下載開源庫 ArduinoJson-master.zip
庫裡面例子:JsonParserExample

// Copyright Benoit Blanchon 2014-2017
// MIT License
//
// Arduino JSON library
// https://bblanchon.github.io/ArduinoJson/
// If you like this project, please add a star!
#include <ArduinoJson.h> void setup() { Serial.begin(9600); while (!Serial) { // wait serial port initialization } // Memory pool for JSON object tree. // // Inside the brackets, 200 is the size of the pool in bytes, // If the JSON object is more complex, you need to increase that value.
// See https://bblanchon.github.io/ArduinoJson/assistant/ StaticJsonBuffer<200> jsonBuffer; // StaticJsonBuffer allocates memory on the stack, it can be // replaced by DynamicJsonBuffer which allocates in the heap. // // DynamicJsonBuffer jsonBuffer(200); // JSON input string. // // It's better to use a char[] as shown here. // If you use a const char* or a String, ArduinoJson will // have to make a copy of the input in the JsonBuffer. char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; // Root of the object tree. // // It's a reference to the JsonObject, the actual bytes are inside the // JsonBuffer with all the other nodes of the object tree. // Memory is freed when jsonBuffer goes out of scope. JsonObject& root = jsonBuffer.parseObject(json); // Test if parsing succeeds. if (!root.success()) { Serial.println("parseObject() failed"); return; } // Fetch values. // // Most of the time, you can rely on the implicit casts. // In other case, you can do root["time"].as<long>(); const char* sensor = root["sensor"]; long time = root["time"]; double latitude = root["data"][0]; double longitude = root["data"][1]; // Print values. Serial.println(sensor); Serial.println(time); Serial.println(latitude, 6); Serial.println(longitude, 6); } void loop() { // not used in this example }

輸出:
這裡寫圖片描述

剩下的時間就是自己研究庫檔案了,和自己的專案結合。