嵌入式硬件篇---JSON通信以及解析


文章目錄

  • 前言
  • 一、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 數據,與單片機進行通信(假設通過串口與單片機通

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75747.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C#】.net core 6.0 依賴注入常見問題之一,在構造函數使用的類,都需要注入到容器里,否則會提示如下報錯,讓DeepSeek找找原因,看看效果

🌹歡迎來到《小5講堂》🌹 🌹這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。🌹 🌹溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!&#…

《P1072 [NOIP 2009 提高組] Hankson 的趣味題》

題目描述 Hanks 博士是 BT(Bio-Tech,生物技術) 領域的知名專家,他的兒子名叫 Hankson。現在,剛剛放學回家的 Hankson 正在思考一個有趣的問題。 今天在課堂上,老師講解了如何求兩個正整數 c1? 和 c2? 的最大公約數…

nginx的自動跳轉https

mkdir /usr/local/nginx/certs/ 創建一個目錄 然后用openssl生成證書 編輯nginx的配置文件 自動跳轉成功 做一個優化,如果訪問的時候后面加了其他的uri也一起自動跳轉了

力扣刷題——508.出現次數最多的子樹和

給你一個二叉樹的根結點 root ,請返回出現次數最多的子樹元素和。如果有多個元素出現的次數相同,返回所有出現次數最多的子樹元素和(不限順序)。 一個結點的 「子樹元素和」 定義為以該結點為根的二叉樹上所有結點的元素之和&…

2025/4/2 心得

第一題 題目描述 給定1001個范圍在[1,1000]的數字,保證只有1個數字重復出現2次,其余數字只出現1次。試用O(n)時間復雜度來求出出現2次的這個數字。 不允許用數組 輸入格式 第一行:一個整數1001; 第二行:1001個用…

0基礎 | 硬件 | NE555芯片 二

目錄 “雙穩態電路之按鍵開關LED” 版本一: 版本二: “單穩態電路之延時自動關” 版本一 “無穩態電路之延時自動開關” 版本一: 版本二 “雙穩態電路之按鍵開關LED” 版本一: 按鍵1 使2腳輸入低電平,則3輸出…

Python實現鏈接KS3,并將文件數據上傳到KS3

前言 本文是該專欄的第55篇,后面會持續分享python的各種干貨知識,值得關注。 說到KS3,首先想到的是金山云提供的對象存儲服務。 相信或多或少的同學,在工作項目中也會遇到KS3相關的需求。比如說,現在有大批量的數據文件需要通過Python,上傳到KS3中。對此,需要怎么去做…

小白 解析thingsboard 規則鏈節點

目錄 1、filter(篩選器)節點內容 1. Alarm Status Filter(報警狀態過濾器) 2. Check Fields Presence(檢查字段存在性過濾器) 3. Check Relation Presence(檢查關系存在性過濾器) 4. Entity Type Filter(實體類型過濾器) 5. Message Type Filter(消息類型過濾器…

PgVectore的使用

PgVectore的使用 一、PgVector的安裝 參照博客:https://blog.csdn.net/u012953777/article/details/147013691?spm1001.2014.3001.5501 二、PgVector的使用 1、創建表與插入數據? ??定義向量字段??: CREATE TABLE items (id SERIAL PRIMARY …

python爬蟲爬取淘寶熱銷(熱門)男裝商品信息(課程設計;提供源碼、使用說明文檔及相關文檔;售后可聯系博主)

TOC 本文僅為記錄學習軌跡,如有侵權,聯系刪除 一、環境說明 使用前必須檢查以下環境 (1)python編譯環境 (2)python腳本執行所需要的庫,具體看代碼(main.py)import導入的部分庫 &a…

C++ 排序(1)

以下是一些插入排序的代碼 1.插入排序 1.直接插入排序 // 升序 // 最壞&#xff1a;O(N^2) 逆序 // 最好&#xff1a;O(N) 順序有序 void InsertSort(vector<int>& a, int n) {for (int i 1; i < n; i){int end i - 1;int tmp a[i];// 將tmp插入到[0,en…

計算機視覺圖像處理基礎系列:濾波、邊緣檢測與形態學操作

計算機視覺圖像處理基礎系列&#xff1a;濾波、邊緣檢測與形態學操作 一、前言二、濾波&#xff1a;圖像的精細化處理?2.1 濾波基礎概念?2.1.1 濾波的本質?2.1.2 圖像噪聲來源與類型? 2.2 線性濾波?2.2.1 均值濾波?2.2.2 高斯濾波? 2.3 非線性濾波?2.3.1 中值濾波? 三…

第八課:在SD中安裝拓展插件

3種拓展安裝方式教學 點擊Extensions安裝方式 經由內置列表查詢安裝&#xff0c;打開Available&#xff0c;輸入鏈接&#xff0c;點擊Load from:&#xff0c;然后篩選后點擊Install通過鏈接安裝&#xff0c;復制代碼倉庫地址&#xff0c;github/gitee&#xff0c;輸入Install …

tomcat的web三大組件Sciidea搭建web/maven的tomcat項目

文章目錄 1. web項目的搭建1. 創建web項目2.修改web.xml版本3.添加servlet、jsp依賴4.servlet示例&#xff08;使用注解&#xff09;5.配置tomcat6.添加artifact7.部署8.啟動tomcat、訪問9.打war包10.部署到tomcat 2.maven的項目搭建1.創建項目圖解 2.tomcat啟動方式圖解idea打…

ZKmall開源商城多云高可用架構方案:AWS/Azure/阿里云全棧實踐

隨著企業數字化轉型的加速&#xff0c;云計算服務已成為IT戰略中的核心部分。ZKmall開源商城作為一款高性能的開源商城系統&#xff0c;其在多云環境下的高可用架構方案備受關注。下面將結合AWS、Azure和阿里云三大主流云平臺&#xff0c;探討ZKmall的多云高可用架構全棧實踐。…

【代碼模板】如何用FILE操作符打開文件?fopen、fclose

#include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {FILE *fp fopen("1.log", "wb");if (!fp) {perror("Failed open 1.log");return -1;}fclose(fp); }關于權限部分參考兄弟篇【代碼模板】C語言中…

Airflow+Spark/Flink vs. Kettle

在遷移億級&#xff08;單表超過1.3億&#xff09;結構化數據&#xff08;達夢→星環&#xff09;的場景下&#xff0c;Airflow&#xff08;結合分布式計算框架&#xff09;的綜合效果優于Kettle&#xff0c;以下是詳細對比與方案建議&#xff1a; 一、核心對比&#xff1a;Air…

多電機顯示并排序

多電機顯示并排序 要實現根據后端傳遞過來的驅動電機數據的數量來顯示不同數量的數據列表&#xff0c;我們可以使用 Vue 的 v-for 指令來遍歷 driveMotorData 數組&#xff0c;并為每個驅動電機生成一個數據列表。這樣&#xff0c;無論后端傳來多少個驅動電機的數據&#xff0…

圖漾相機——C#語言屬性設置

文章目錄 前言1.示例程序說明2.SDK API功能介紹2.1 ListDevice 枚舉設備2.2 Open 打開相機2.3 OpenDeviceByIP 通過IP打開設備2.4 Close 關閉設備2.5 DeviceStreamEnable 取流使能2.6 DeviceStreamFormatDump 取流分辨率2.7 DeviceStreamFormatConfig 取流分辨率配置2.8 Device…