微控圈（MCU Loop） - JSON
type: channel
link: https://www.mculoop.com/tag/JSON/
items: Qt JSON 库
items: 轻量级数据交换格式 JSON

Qt JSON 库
type: item
date: 2021-11-02T16:00:00+00:00
description: Qt 的 JSON 库由几种对象和相应的头文件组成，主要的有： QJsonDocument 该类用于操作 JSON 文档。 从文件到文档对象实例： QJsonDocument jDoc(QJsonDocument::fromJson(file.readAll())) 此外还有 fromBinaryData() 或 fromRawData() 方法。 JSON 对象 obj 到 文档 到文件： QJsonDocument jDoc(obj); file.write(jDoc.toJson(QJsonDocument::Indented)); QJsonObject QJsonObject 是一个重要的类型，它就是 JSON 中的“对象”概念。一个对象就是一个键值对。 使用 insert() 插入一个键值对或覆盖一个已存在的键值对还可以删掉一个键值对， 用 remove() 可以删除一个键值对。 QJsonArray 它是 JSON 数组类，可以存储多个没有键的值（QJsonValue） QJsonValue QJsonValue 也是一个重要的常用类型，它是键值对的值或是数组的值。而值可以是一个键值对，也可以是一个数组，还可以是其它类型： bool（QJsonValue::Bool） double（QJsonValue::Double） string（QJsonValue::String） array（QJsonValue::Array） object（QJsonValue::Object） null（QJsonValue::Null） 要操作一个对象类型的值，要先把值转换成对象副本才可以： QJsonValue.toObject() 所以不能直接修改一个值 ValueA 下面的某个键的值 ValueB，只能将这个值 ValueA 转换成 ObjectA 然后修改 Object 的某个键的值 ValueB，然后再用对象 ObjectA 覆盖 ValueA（可以用 insert 方法）。如果要修改多层次的某个值，就要采用递归的方法一级一级找到要修改的值，然后用高层次的对象覆盖。这点就比 python 的 json 数据操作麻烦点。

轻量级数据交换格式 JSON
type: item
date: 2016-01-10T17:39:00+00:00
description: JSON 简介 JSON（JavaScript Object Notation）是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集，但同时又独立于编程语言（与 JavaScript 没有半毛钱关系）。由于 JSON 文本数据格式既便于人的阅读和编写，又便于程序对他的解析和构造，所以被大家广泛地运用于各种编程语言，因此在软件的数据交换需求方面很有市场。 [...]