Linux——Json

一 概念

json是一種輕量級,基于文本的,可讀的數據交換格式,能夠讓數據在不同系統(比如前端—后端,服務器—客戶端)間方便傳遞/存儲。在編程語言中都內置了處理json數據的方法

二 語法規則

1. 數據格式(鍵值對+結構化)

編譯時后面要加-ljsoncpp

{"name": "小王",      // 字符串值"tel": "13500000000",// 字符串值 "age": 20,           // 數字值"is_vip": true,      // 布爾值"hobbies": ["籃球", "音樂"], // 數組"info": {            // 嵌套對象"city": "北京"     }
}

核心規則:

用{}表示對象(鍵值對集合),【】表示數組

鍵key必須是字符串(用雙引號包裹)

值value可以是字符串,數字,布爾值,數組,null等

不同鍵值對用,分隔。最后一個不加

2. 和編程語言的映射

JSon::Value val; 在json這個名字空間中,value這個類的對象是val。這個里面存name/tel等

#include <iostream>
#include <string.h>
#include <string>
#include <jsoncpp/json/json.h>using namespace std;
int main()
{Json::Value val;val["name"] = "小王";//給json對象加鍵值對  name——小王val["tel"] = "13500000000";char buff[128] = {0};strcpy(buff, val.toStyledString().c_str());cout << buff << endl;Json::Value res;//用來存反序列化后的結果Json::Reader Read;//反序列化工具Read.parse(buff, res);//把buff中的JSON字符串轉成JSon::Valuecout << res["name"].asString() << endl;cout << res["tel"].asString() << endl;
}

三 使用JsonCpp庫操作JSON

流程:構建JSONM——序列化為字符串——反序列化為JSON——提取數據

1. 構建json對象(Json::Value val)

2. 序列化為字符串(val.toStyledString())

把內存里的?Json::Value數據對象(結構化數據),轉成 人類可讀的JSON字符串,方便存儲 / 傳輸。返回std::string類型

?toStyledString(格式化序列化,輸出帶縮進換行,更美觀)、toString(緊湊序列化,無多余空白)

  1. c_str()?的作用

    • val.toStyledString().c_str()?返回?const char*,指向?std::string?內部的以?'\0'?結尾的字符數組。
  2. strcpy?的類型匹配

    • strcpy?的原型為?char* strcpy(char* dest, const char* src)
    • buff?的類型是?char[128],在函數調用時?隱式轉換為?char*(指向數組首元素的指針)。
    • 風險:若 JSON 字符串長度超過 127 字節,會導致?緩沖區溢出

3. 反序列化為JSON

Json::Reader Read;:創建一個解析器對象,像一個翻譯器,負責把文本形式的JSON轉化為程序能操作的結構化數據

線程安全:Json::Reader?實例?非線程安全,若在多線程環境中使用,需為每個線程單獨創建。
生命周期:通常只需在解析 JSON 前創建,解析完成后可銷毀(作用域結束自動釋放)。
為什么要反序列化:因為傳輸 / 存儲時只能用字符串,但程序要操作數據,必須轉回結構化對象。

Read.parse(...):執行解析操作,將?JSON 字符串(存儲在?buff?中)解析為?Json::Value 對象(存儲在?res?中),便于后續程序訪問 JSON 中的字段。

res:
類型:Json::Value&(引用)。
含義:解析結果將存入此對象。
示例:解析后可通過?res["name"]?訪問?"小王"。

為什么res是引用?

Json::Reader::parse?的目的是把輸入的 JSON 字符串解析成?Json::Value?類型的結構化數據。函數需要將解析后的結果 “輸出” 給調用者,引用是實現這種 “輸出” 的高效方式:如果不用引用,而是按值傳遞(Json::Value res),函數內部對?res?的修改無法傳遞到函數外部,調用者拿不到解析后的結果,無法實現 “將 JSON 字符串解析為可用對象” 的核心需求。

通過引用傳遞(Json::Value&),函數直接操作調用者提供的?res?對象,無需拷貝,效率更高,尤其是在處理大型 JSON 數據時,這種性能優勢更明顯。

4. 按鍵提取json數據并轉化為字符串

?res["name"].asString():
從?Json::Value?對象中,按?鍵(Key)?提取對應的值,并將其轉換為 C++ 的?std::string?類型。

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

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

相關文章

大模型之微調篇——指令微調數據集準備

寫在前面 高質量數據的準備是微調大模型的重中之重&#xff0c;一些高質量的數據集可能遠比模型性能更佳重要。 我是根據自己的數據照著B站up code花園LLaMA Factory 微調教程&#xff1a;如何構建高質量數據集&#xff1f;_嗶哩嗶哩_bilibili做的。 數據集格式 在LLaMA Fa…

LVS—DR模式

LVS—DR模式 LVS DR 模式詳細簡介 一、模式定義與核心原理 LVS DR&#xff08;Direct Routing&#xff09;模式&#xff0c;即直接路由模式&#xff0c;是 Linux Virtual Server&#xff08;LVS&#xff09;實現負載均衡的經典模式之一&#xff0c;工作于網絡四層&#xff0…

寶玉分享VibeCoding構建Agent

借助 Claude Code 完成的一個翻譯智能體 (Translator Agent)。你只需輸入一段文字、一個網址或一個本地文件路徑&#xff0c;它就能自動提取內容并完成翻譯。更酷的是&#xff0c;它還能修正原文中的拼寫錯誤&#xff0c;確保譯文的準確流暢。 到底什么是“真正的”AI Agent&a…

在spring boot中使用Logback

在 Spring Boot 中使用 Logback 作為日志框架是開發中的常見需求&#xff0c;因其高性能和靈活配置而廣受青睞。以下是詳細實踐指南&#xff0c;結合了配置方法、代碼示例及最佳實踐&#xff1a; &#x1f527; 一、依賴配置 Spring Boot 默認集成了 Logback&#xff0c;無需手…

騰訊云 Lighthouse 輕量應用服務器:數據驅動的架構選型指南

摘要&#xff1a;騰訊云 Lighthouse 作為面向輕量級應用場景的優化解決方案&#xff0c;通過高性價比套餐式售賣、開箱即用應用模板及流量包計費模式&#xff0c;顯著降低中小企業與開發者的上云門檻。本文基于性能測試與橫向對比&#xff0c;量化分析其核心優勢與適用邊界。 …

Linux TCP/IP協議棧中的TCP輸入處理:net/ipv4/tcp_input.c解析

在網絡通信領域,TCP(傳輸控制協議)因其可靠的面向連接特性而被廣泛應用。Linux內核的TCP/IP協議棧實現了對TCP協議的高效處理,其中net/ipv4/tcp_input.c文件扮演著關鍵角色,負責處理TCP數據包的輸入邏輯。下面是對該文件核心功能的深入剖析。 一、TCP數據包接收與處理 (…

物聯網傳輸網關、RTU、DTU及SCADA系統技術解析

目錄 摘要 一、引言 二、物聯網傳輸網關 1. 定義 2. 類型 3. 分類 4. 工作原理 5. 差異分析 總結&#xff1a; 三、RTU&#xff08;遠程終端單元&#xff09; 1. 定義 2. 工作原理 3. 特點 4. 應用場景 四、DTU&#xff08;數據傳輸單元&#xff09; 1. 定義 …

【unity游戲開發——熱更新】YooAsset簡化資源加載、打包、更新等流程

注意&#xff1a;考慮到熱更新的內容比較多&#xff0c;我將熱更新的內容分開&#xff0c;并全部整合放在【unity游戲開發——熱更新】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是YooAsset&#xff1f;2、系統需求3、系統特點 一、下載安裝…

AWS RDS/Aurora 開啟 Database Insights 高級模式全攻略

想要深入了解數據庫性能問題?AWS Database Insights 高級模式為您提供強大的性能分析工具。本文詳細對比標準模式與高級模式的功能差異,并提供完整的啟用指南和實戰測試結果。 一、Database Insights 模式對比 AWS CloudWatch Database Insights 提供兩種模式:標準模式和高…

XML SimpleXML

XML SimpleXML 引言 XML&#xff08;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;它被廣泛應用于Web服務和數據交換。SimpleXML是PHP中一個處理XML數據非常便捷的庫。本文將詳細介紹SimpleXML庫的基本用法&#xff0c;幫助讀者快速掌握XML數據…

Docker簡單介紹與使用以及下載對應鏡像(項目前置)

DockerDocker安裝Docker卸載Docker配置鏡像源配置鏡像加速 Docker服務命令1.鏡像操作命令2.容器操作命令 安裝Mysql**數據卷掛載** Docker 在linux中軟件安裝說起: 以前在linux中安裝軟件,是直接安裝在linux操作系統中,軟件和操作系統耦合度很高,不方便管理. 因為linux版本不…

MyBatis 簡介

MyBatis 簡介 MyBatis 是一款優秀的持久層框架&#xff0c;它支持定制化 SQL、存儲過程以及高級映射&#xff0c;能夠幫助開發者將 Java 對象與數據庫表進行靈活映射&#xff0c;簡化數據持久化操作。以下從多個維度詳細介紹 MyBatis&#xff1a; 一、核心定位與優勢 輕量級…

自監督學習在合成孔徑聲吶目標識別中的應用之論文閱讀

自監督學習在合成孔徑聲吶目標識別中的應用 BW Sheffield 美國巴拿馬城海軍水面作戰中心 1 引言 在自主水下航行器(AUVs)中應用計算機視覺面臨著獨特的挑戰,因為海洋環境往往條件不可預測且極為嚴苛。傳統計算機視覺研究主要依賴光學相機成像,而在光照不足、懸浮沉積物及水…

進程間通信2(命名管道)linux

1 命名管道 前面講到匿名管道&#xff0c;有一個很大的限制&#xff0c;那就是只有具有相同祖先&#xff08;具有親緣關系&#xff09;的進程間才能進行通信&#xff0c;但是如果想實現不同進程間的通信&#xff0c;這個時候命名管道就發揮著巨大作用。 命名管道是一種特殊類…

簡單通過SenseVoice給自己配置一個語音轉文字服務

首先把代碼下載下來 gitgithub.com:FunAudioLLM/SenseVoice.git 然后寫一個docker文件 FROM ubuntu:latestRUN apt-get update -y RUN apt-get install -y python3-full python3-pip RUN mkdir -p /SenseVoice WORKDIR /SenseVoice RUN python3 -m venv . ENV USE_CUDA0 EXP…

網絡釣魚攻擊

?根據2023年Proofpoint年度網絡釣魚報告顯示&#xff1a;91%的針對性攻擊始于釣魚郵件&#xff0c;平均每30秒就有一個企業成為攻擊目標&#xff0c;全球損失超過$6.5B? 一、釣魚攻擊技術深度解析 1. 釣魚攻擊核心技術架構 2. 現代釣魚技術演進 ?攻擊向量升級路線? ?當前…

uvicorn api:app --host 0.0.0.0 --port 7777容器運行失敗

docker logs pycorrector-container-gpu 你這個報錯的核心是&#xff1a; ERROR: Error loading ASGI app, Could not import module "api".這說明&#xff1a; uvicorn api:app 沒有找到 api.py 文件&#xff0c;或者沒法導入 app 對象。 &#x1f50d; 一步步排查…

熱成像儀測MOSFET溫度

熱成像儀測MOSFET溫度 根據提供的搜索結果&#xff0c;熱測量方法主要分為非接觸式和接觸式兩大類&#xff0c;針對不同材料特性和測量場景各有優勢。以下是核心方法的總結及關鍵技術要點&#xff1a; &#x1f525; 一、非接觸式熱測量方法 紅外熱成像技術 原理&#xff1a;通…

Dagster資產元數據與標簽:數據治理的利器

在現代數據棧中&#xff0c;有效的數據治理至關重要。Dagster作為領先的數據編排平臺&#xff0c;提供了強大的資產元數據和標簽功能&#xff0c;幫助團隊更好地理解、組織和跟蹤數據資產。本文將深入探討Dagster中的資產元數據和標簽功能&#xff0c;展示如何利用這些功能提升…

基于物聯網的智能飲水機系統設計

標題:基于物聯網的智能飲水機系統設計 內容:1.摘要 隨著物聯網技術的快速發展&#xff0c;智能設備在日常生活中的應用越來越廣泛。本研究的目的是設計一種基于物聯網的智能飲水機系統&#xff0c;以提高飲水機的使用便捷性和智能化程度。方法上&#xff0c;通過傳感器實時監測…