- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想创建一个 QJsonDocument
但我找不到将我的数据推送到文档中的方法。在 JsonBuilder::CreateContact
结束时,我的文档似乎是空的。请提供一些帮助 X)。
我尝试使用一些指针并将它们添加到我的文档中,因为我正在考虑破坏我的不同对象(contactObj
、detailObj
、 addressObj
, date
) 但使用此方法我无法构建类型 QJsonValue
(无法访问 private
成员 QjsonValue::QJsonValue
) 所以我错了吗?
JsonBuilder.h
#ifndef JSONBUILDER_H
#define JSONBUILDER_H
#include <QObject>
#include <QJsonDocument>
#include <QMap>
#include <QString>
#include <QList>
class JsonBuilder: public QObject
{
Q_OBJECT
private:
QJsonDocument* document;
public:
JsonBuilder();
~JsonBuilder();
void CreateContact(QMap<QString,QList<QString>> map);
void CreateMessage(QMap<QString,QString> map);
QJsonDocument* getDocument(){ return document; }
};
#endif // JSONBUILDER_H
JsonBuilder.cpp
#include "Jsonbuilder.h"
#include <QPair>
#include <QJsonObject>
#include <QJsonValue>
#include <Global.h>
#include <QDebug>
#include <QMapIterator>
#include <QJsonArray>
JsonBuilder::JsonBuilder(){
document = new QJsonDocument(QJsonArray());
}
void JsonBuilder::CreateContact(QMap<QString, QList<QString>> map){
QJsonObject contactObj;
QJsonObject detailObj;
QJsonObject addressObj;
QJsonObject date;
contactObj.insert(Global::KEY_TYPE_OBJ,QJsonValue("contact"));
QMapIterator<QString, QList<QString>> it(map);
while (it.hasNext()) {
it.next();
qDebug()<< "Key value = "+it.key();
if(it.key() == Global::KEY_FIRST_NAME){
contactObj.insert(Global::KEY_FIRST_NAME,QJsonValue(it.value()[0]));
qDebug()<< "create firstName in Json " + it.value()[0];
}
if(it.key() == Global::KEY_LAST_NAME){
contactObj.insert(Global::KEY_LAST_NAME,QJsonValue(it.value()[0]));
qDebug()<< "create LastName in Json "+ it.value()[0];
}
if(it.key() == Global::KEY_PSEUDO){
QJsonArray Pseudos;
foreach (QString contact, it.value()) {
Pseudos.append(QJsonValue(contact));
qDebug()<< "create Pseudo in Json "+ contact;
}
contactObj.insert(Global::KEY_PSEUDO,QJsonValue(Pseudos));
}
//Detail Object
if(it.key() == Global::KEY_DETAIL_ROLE){
detailObj.insert(Global::KEY_DETAIL_ROLE,QJsonValue(it.value()[0]));
qDebug()<< "create DetailRole in Json "+ it.value()[0];
}
if(it.key() == Global::KEY_DETAIL_ORGANIZATION){
detailObj.insert(Global::KEY_DETAIL_ORGANIZATION,QJsonValue(it.value()[0]));
qDebug()<< "create DetailOrganization in Json "+ it.value()[0];
}
if(it.key() == Global::KEY_DETAIL_DEPARTMENT){
detailObj.insert(Global::KEY_DETAIL_DEPARTMENT,QJsonValue(it.value()[0]));
qDebug()<< "create DetailDepartment in Json "+ it.value()[0];
}
if(it.key() == Global::KEY_DETAIL_FUNCTION){
detailObj.insert(Global::KEY_DETAIL_FUNCTION,QJsonValue(it.value()[0]));
qDebug()<< "create DetailFunction in Json "+ it.value()[0];
}
if(it.key() == Global::KEY_PHONE){
QJsonArray phones;
foreach (QString phone, it.value()) {
phones.append(QJsonValue(phone));
qDebug()<< "create Phones in Json "+phone;
}
contactObj.insert(Global::KEY_PHONE,QJsonValue(phones));
}
if(it.key() == Global::KEY_EMAIL){
QJsonArray emails;
foreach (QString email, it.value()) {
emails.append(QJsonValue(email));
qDebug()<< "create Emails in Json "+email;
}
contactObj.insert(Global::KEY_EMAIL,QJsonValue(emails));
}
//Dates Object
if(it.key() == Global::KEY_BIRTHDAY){
date.insert(Global::KEY_BIRTHDAY,QJsonValue(it.value()[0]));
qDebug()<< "create Birthday in Json "+it.value()[0];
}
if(it.key() == Global::KEY_WEDDING){
foreach (QString dateWedding, it.value()) {
date.insert(Global::KEY_WEDDING, QJsonValue(dateWedding));
qDebug()<< "create wedding in Json "+dateWedding;
}
}
//Address Object
if(it.key() == Global::KEY_STREET){
addressObj.insert(Global::KEY_STREET,QJsonValue(it.value()[0]));
qDebug()<< "create street in Json "+it.value()[0];
}
if(it.key() == Global::KEY_POSTAL_CODE){
addressObj.insert(Global::KEY_POSTAL_CODE,QJsonValue(it.value()[0]));
qDebug()<< "create PostalCode in Json "+it.value()[0];
}
if(it.key() == Global::KEY_CITY){
addressObj.insert(Global::KEY_CITY, QJsonValue(it.value()[0]));
qDebug()<< "create city in Json "+it.value()[0];
}
if(it.key() == Global::KEY_COUNTRY){
addressObj.insert(Global::KEY_COUNTRY, QJsonValue(it.value()[0]));
qDebug()<< "create Country in Json "+it.value()[0];
}
}
contactObj.insert(Global::KEY_DETAIL,QJsonValue(detailObj));
contactObj.insert(Global::KEY_ADDRESS_OBJ,QJsonValue(addressObj));
contactObj.insert(Global::KEY_DATE,QJsonValue(date));
if(document->isArray()){
document->array().append(contactObj);
}
else {
qDebug()<<"JsonDocument not ready for insert";
}
qDebug()<< "Doc in function create : ";
qDebug()<< *document;
}
void JsonBuilder::CreateMessage(QMap<QString, QString> map){
}
JsonBuilder::~JsonBuilder(){
delete document;
}
最佳答案
注意(在文档中)array() 方法的签名:
QJsonArray QJsonDocument::array() const
当你这样使用它时:
document->array().append(contactObj);
您正在将对象附加到 doc 数组的临时拷贝。
你最好创建一个数组,附加你的对象,然后将数组设置到文档,这样:
QJsonArray array;
array.append(contactObj);
//append every else object you need
document->setArray(array);
代替
if(document->isArray()){
document->array().append(contactObj);
}
else {
qDebug()<<"JsonDocument not ready for insert";
}
关于c++ - 如何创建一个QJsonDocument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47631297/
我正在尝试学习如何使用 JSON 和 Qt 我已经处理过,但我在从文件中获取 QJsonDocument 时遇到了问题。文件可以正确打开,我也可以使用 qDebug() 查看文件的内容,但是从该文件创
我在使用 QJON 对象解析 JSON 时遇到了问题。 我读取了一个在资源文件中引用的我的 json 文件,读取内容并尝试从我得到的 QString 初始化一个 QJSONDocument。而且它似乎
我正在尝试学习如何使用 JSON 和 Qt JSON 类。例如,我想创建一个简单的 QJsonDocument,将其保存到文件中,将其加载到不同的 QJsonDocument 中并比较结果。 我设法创
我想将多个 QJsonObject 添加到 QJsonDocument。这可能吗? 应该是这样的: [ { "objID": "obj1" //... Some
下面是简单的代码: QByteArray ba = jdoc.toBinaryData(); QJsonDocument jdoc2; jdoc2.fromBinaryData(ba); qDebu
在我的项目中,我使用 QJsonDocument::fromJson() 从一个 json 文件中读取。这很好用,但是当我尝试使用 toJson() 将 QJsonDocument 写回文件时,一些
我已经尝试过这段代码并且有效,但我不明白如何获取 json 并使用 Qt 转换为数组或列表。我的代码: QEventLoop eventLoop; QNetworkAccessManager mgr;
我有一个二进制字符串,其中包含我需要解析的 JSON 对象。但是当我从它创建 QJsonDocument 时,我得到一个空文档。创建后我尝试读取错误代码,但 QJsonParseError 包含“No
我有一个字符串,它包含(不是是)JSON 编码数据,如本例所示: foo([1, 2, 3], "some more stuff") | | start end
我制作了转换 QList 的类(非常大的列表)转换为 JSON 字符串,但它会生成超大文本。 代码如下: QJsonObject rootObject; rootObject.insert("Test
我想向 QJsonDocument 添加多个 QJsonObject 而不是 QJsonArray。这可能吗?它应该看起来像这样: { "Obj1" : { "objID":
我在我的 qt5 应用程序中从 pusher.com WebSocket 获取一些 json 数据,我正在努力解析他们发送的“序列化”json。我终于确定了问题所在,但不确定如何解决: 我做了一个小测
我有兴趣了解如何使用 Qt 的 QJsonDocument 来解析来自简单嵌套 JSON 的所有条目(因为我刚刚开始研究这个)。 嵌套的 json 示例: { "city": "London"
我正在使用 Qt5。我正在尝试从 json 对象获取值。这是我试图从中获取数据的 json 对象的样子: { "success": true, "properties": [
我有以下 JSON 结构: "{ "dateTime": "02/06/2016 - 13:01:06", "event": 12344, "eventOwner": "1",
void test() { QFile f("..\\data\\NAVHistory2.txt"); if (!f.open(QFile::ReadOnly)) {
我是一名优秀的程序员,十分优秀!