gpt4 book ai didi

c++ - 将 QString 转换为 QJsonArray

转载 作者:行者123 更新时间:2023-11-28 04:11:58 30 4
gpt4 key购买 nike

我正在尝试从 QString 获取数组。

我在网上得到了将字符串转换为 QJsonDocument 的建议,但是,我的数组是空的。

QString string = "\"person\":\"{\"name\":\"John\", \"surname\":\"Smith\"}";
QJsonDocument doc1 = QJsonDocument::fromJson(string.toUtf8());

QJsonArray array = doc1.array();

预期结果是得到一个QJsonValues数组(一个QJsonArray):

array[0] : {"name":"John"},
array[1] : {"surname":"Smith"}

最佳答案

显示的 JSON 字符串中不存在任何数组。

数组由 [ ] 字符表示。对象由 { } 字符表示。

您显示的 JSON "person":"{"name":"John", "surname":"Smith"}" 格式错误,因为它嵌入了太多 " 中的字符。所以让我们假设这只是您的错字。

"person":{"name":"John", "surname":"Smith"} 是一个名为 person 的字段,其值是一个包含以下内容的对象两个命名的字符串字段,namesurnameQJsonDocument 无法按原样解析它,因为它期望 JSON 是对象或数组。

{"person":{"name":"John", "surname":"Smith"}} 是一个未命名的对象,包含相同类型的 person field 。 doc1.isObject() 为此返回 true。

无论哪种方式,doc1.array() 都没有要返回的数组(doc1.isArray() 返回 false)。所以,如果你想从这些数据中得到一个数组,你必须自己创建它,例如:

QString string = "{\"person\":{\"name\":\"John\", \"surname\":\"Smith\"}}";
QJsonDocument doc1 = QJsonDocument::fromJson(string.toUtf8());
if (!doc1.isObject()) {
// handle parse error...
}

QJsonValue &person = doc1["person"];
if (person.isUndefined()) {
// key "person" does not exist...
}


// creates an array of strings:
// array[0] = "John"
// array[1] = "Smith"
QJsonArray array = {
person["name"],
person["surname"]
};

or

// creates an array of objects:
// array[0] = {"name":"John"}
// array[1] = {"surname":"Smith"}
QJsonArray array = {
QJsonObject({"name", person["name"]}),
QJsonObject({"surname", person["surname"]})
};

// use array as needed...

关于c++ - 将 QString 转换为 QJsonArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530943/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com