文章目錄
- 前言
- 一、JSON特點
- 語法簡單
- 數據格式靈活
- 輕量化
- 跨語言使用
- 二、JSON數據結構
- 對象
- 數組
- 三、JSON在單片機之間通信的應用
- 數據封裝與傳輸
- 四、JSON示例代碼
- 五、JSON在上位機與單片機之間通信的應用
- 數據交互
- 六、JSON示例代碼
- 七、JSON解析與生成
- 解析
- 生成
- 八、Python中的數據解析
- 1.字符串解析
- 1.1整數
- 1.2浮點數
- 1.3布爾數
- 1.4JSON格式字符串
- 1.5CSV格式字符串
- 2.字節解析
- 2.1解析為整數
- 2.2解析為字符串
- 3.列表解析
- 3.1解析嵌套列表
- 4.字典解析
- 4.1解析嵌套字典
- 5.XML 解析
- 6.自定義數據類型解析
前言
JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,在單片機之間、上下位機之間的通信中被廣泛應用。
一、JSON特點
語法簡單
語法簡潔:JSON 的語法基于 JavaScript 的對象和數組字面量表示法,非常直觀和簡潔。它使用鍵值對來表示數據,易于閱讀和編寫。
數據格式靈活
數據格式靈活:支持多種數據類型,包括字符串、數字、布爾值、數組、對象等,可以方便地表示復雜的數據結構。
輕量化
輕量級:相比其他一些數據交換格式(如 XML),JSON 的數據量較小,在網絡傳輸和存儲方面具有優勢,能夠有效減少通信帶寬和存儲空間的占用。
跨語言使用
跨語言支持:幾乎所有的編程語言都提供了對 JSON 的解析和生成支持,這使得它在不同類型的單片機和上位機(如 PC、手機等)之間進行數據交換時非常方便,無需考慮語言差異。
二、JSON數據結構
對象
對象:由花括號 {} 包圍,包含一系列鍵值對。鍵是字符串,值可以是任意數據類型。例如:{“name”: “John”, “age”: 30, “isStudent”: false}。
數組
數組:由方括號 [] 包圍,包含一系列元素,元素可以是任意數據類型。例如:[1, 2, 3, “four”, true]。
三、JSON在單片機之間通信的應用
數據封裝與傳輸
數據封裝與傳輸:單片機通常資源有限,JSON 的輕量級特性使其成為一種理想的數據格式。當多個單片機之間需要進行數據交互時,例如傳感器節點與控制節點之間的通信,傳感器節點可以將采集到的數據(如溫度、濕度、光照強度等)封裝成 JSON 格式的字符串,然后通過串口、SPI 等通信接口發送給控制節點。控制節點接收到數據后,再解析 JSON 字符串,獲取其中的具體數據值,進行相應的處理。
四、JSON示例代碼
以 C 語言為例,在單片機中使用 cJSON 庫來處理 JSON 數據。假設要發送一個包含溫度和濕度數據的 JSON 消息,代碼如下:
#include "cJSON.h"// 模擬采集到的溫度和濕度數據
float temperature = 25.5;
float humidity = 60.0;int main() {// 創建一個JSON對象cJSON *root = cJSON_CreateObject();// 向JSON對象中添加溫度和濕度數據cJSON_AddNumberToObject(root, "temperature", temperature);cJSON_AddNumberToObject(root, "humidity", humidity);// 將JSON對象轉換為字符串char *json_string = cJSON_Print(root);// 這里可以通過串口等方式將json_string發送出去// 釋放內存cJSON_Delete(root);free(json_string);return 0;
}
五、JSON在上位機與單片機之間通信的應用
數據交互
數據交互:上位機(如 PC 端的應用程序或手機 APP)與單片機之間經常需要進行數據交互。例如,上位機向單片機發送控制指令,或者從單片機獲取傳感器數據、設備狀態等信息。JSON 格式可以方便地對這些數據進行封裝和傳輸。上位機將指令或請求數據封裝成 JSON 格式發送給單片機,單片機解析 JSON 數據并執行相應操作,然后將結果以 JSON 格式返回給上位機。上位機再解析返回的 JSON 數據,進行顯示或進一步處理。
六、JSON示例代碼
示例代碼:在 Python 中使用 json 模塊處理 JSON 數據,與單片機進行通信(假設通過串口與單片機通