首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改QJsonObject

如何修改QJsonObject
EN

Stack Overflow用户
提问于 2018-08-15 19:27:44
回答 1查看 2.1K关注 0票数 0

我可以在简单的json文件中以这种方式设置对象的值。

Qt代码:

代码语言:javascript
复制
if(file.open(QIODevice::ReadOnly)){
    QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
    QJsonObject obj = doc.object();
    obj["gender"] = "female";
    doc.setObject(obj);
    manager.put(request, doc.toJson());
}

简单的json文件:

代码语言:javascript
复制
{
    "resourceType": "Patient",
    "gender": "male",
    "birthDate": "2018-08-21"
}

因此,此代码将性别的值更改为女性。

但是当我使用更大的json时,其中有“对象下的对象”。

代码语言:javascript
复制
{
    "resource": {
        "resourceType": "Patient",
        "id": "530f8eb0-1f0b-41b0-b94",
        "text": {
            "status": "generated",
            "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Teppo Testman\n            <a name=\"mm\"></a>\n          </div>"
        },
        "name": [{
            "family": "Testman",
            "given": [
                "Teppo"
            ]
        }],
        "gender": "male",
        "birthDate": "1993-02-12"
    }
}

更新:

代码语言:javascript
复制
{
    "resourceType": "Bundle",
    "id": "17772d63-3b14-494f-8182-06b67c970550",
    "meta": {
        "versionId": "1",
        "lastUpdated": "2018-08-15T12:08:48.036+00:00"
    },
    "type": "collection",
    "entry": [{
            "resource": {
                "resourceType": "Observation",
                "text": {
                    "status": "generated",
                    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Height\n            <a name=\"mm\"></a>\n          </div>"
                },
                "status": "final",
                "code": {
                    "coding": [{
                        "system": "http://loinc.org",
                        "code": "8302-2",
                        "display": "Body height"
                    }]
                },
                "subject": {
                    "reference": "Patient/530f8eb0-1f0b-41b0-b94b-c25a14656645"
                },
                "valueQuantity": {
                    "value": 166,
                    "unit": "cm"
                }
            }
        },
        {
            "resource": {
                "resourceType": "Observation",
                "text": {
                    "status": "generated",
                    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">BMI\n            <a name=\"mm\"></a>\n          </div>"
                },
                "status": "final",
                "code": {
                    "coding": [{
                        "system": "http://loinc.org",
                        "code": "39156-5",
                        "display": "Body mass index (BMI) [Ratio]"
                    }]
                },
                "subject": {
                    "reference": "Patient/530f8eb0-1f0b-41b0-b94b-c25a14656645"
                },
                "valueString": "23"
            }
        },
        {
            "resource": {
                "resourceType": "Observation",
                "text": {
                    "status": "generated",
                    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">FEV1 [l]\n            <a name=\"mm\"></a>\n          </div>"
                },
                "status": "final",
                "code": {
                    "coding": [{
                        "system": "http://loinc.org",
                        "code": "18759-1",
                        "display": "Spirometry study"
                    }]
                },
                "subject": {
                    "reference": "Patient/530f8eb0-1f0b-41b0-b94b-c25a14656645"
                },
                "valueQuantity": {
                    "value": 2,
                    "unit": "l"
                }
            }
        },
        {
            "resource": {
                "resourceType": "Observation",
                "text": {
                    "status": "generated",
                    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">FEV6 [l]\n            <a name=\"mm\"></a>\n          </div>"
                },
                "status": "final",
                "code": {
                    "coding": [{
                        "system": "http://loinc.org",
                        "code": "18759-1",
                        "display": "Spirometry study"
                    }]
                },
                "subject": {
                    "reference": "Patient/530f8eb0-1f0b-41b0-b94b-c25a14656645"
                },
                "valueQuantity": {
                    "value": 2.9,
                    "unit": "l"
                }
            }
        },
        {
            "resource": {
                "resourceType": "Observation",
                "text": {
                    "status": "generated",
                    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">PEF [l/s]\n            <a name=\"mm\"></a>\n          </div>"
                },
                "status": "final",
                "code": {
                    "coding": [{
                        "system": "http://loinc.org",
                        "code": "18759-1",
                        "display": "Spirometry study"
                    }]
                },
                "subject": {
                    "reference": "Patient/530f8eb0-1f0b-41b0-b94b-c25a14656645"
                },
                "valueQuantity": {
                    "value": 6.5,
                    "unit": "l/s"
                }
            }
        },
        {
            "resource": {
                "resourceType": "Patient",
                "id": "530f8eb0-1f0b-41b0-b94b-c25a14656645",
                "text": {
                    "status": "generated",
                    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Teppo Testman\n            <a name=\"mm\"></a>\n          </div>"
                },
                "name": [{
                    "family": "Testman",
                    "given": [
                        "Teppo"
                    ]
                }],
                "gender": "male",
                "birthDate": "1993-02-12"
            }
        }
    ]
}

我无法修改该值。有什么简单的方法可以做到这一点吗?我一直在努力寻找解决方案,但没有成功!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 19:45:24

json不是一个线性结构,所以您必须通过键的树枝来查找它,在这种情况下,有一个gender是json的子项,所以首先您将访问resource,然后访问gender,如下所示:

代码语言:javascript
复制
if(file.open(QIODevice::ReadOnly)){
    QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
    QJsonObject root = doc.object();
    QJsonObject res = root["resource"].toObject();
    res["gender"] = "female";
    root["resource"] = res;
    doc.setObject(root);
    //another code
    manager.put(request, doc.toJson());
}

更新:

想法是一样的,你不能直接访问,但你必须知道json的结构。虽然我有一个观察,例如条目的子项是一个数组,正常的是这些子项具有相同的结构,但在你的例子中,最后一个是不同的,这是不寻常的。

代码语言:javascript
复制
if(file.open(QIODevice::ReadOnly)){
    QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
    QJsonObject root = doc.object();
    QJsonArray entries = root["entry"].toArray();
    for(int i=0; i < entries.count(); i++){
        QJsonObject obj = entries[i].toObject();
        QJsonObject objs = obj["resource"].toObject();
        if(objs.contains("gender")){
            objs["gender"]= "female";
            obj["resource"] = objs;
            entries[i] = obj;
        }
    }
    root["entry"] = entries;
    doc.setObject(root);
    // another process
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51857820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档