我需要你们的帮助。
目前我正在使用cJSON来解析格式化为Json标准的数据。
以下数据是数据的一个示例。
{
"time" : {
"timezone" : string,
"ntpservers" : array<string>
},
"datetime" : {
"value" : "2013-10-23 03:35:45.182042",
"space-custom-class" : "datetime.datetime"
}
}
我遇到的问题是我不知道如何将数据分解为键值对 并将它们存储在地图中。我可以看到“时间”是一个键,但值是一个字典,所以我如何将其存储为“时间”的值,这是“日期时间”键。我知道有一些迭代涉及,但我被卡住了。因为值可以是基本类型,数组或字典应该是一个像模板一样的通用对象? 一些例子会非常有用。
提前感谢您的帮助。
答案 0 :(得分:4)
JSON.org列出了许多可以使用的C ++ JSON解析器库。
答案 1 :(得分:0)
我会看看boost :: property_tree它会让你不必自己编写代码。
http://www.boost.org/doc/libs/1_54_0/doc/html/property_tree.html
答案 2 :(得分:0)
我不知道您可以在项目中使用哪些依赖项,因此我的答案可能不会被您接受。
在Qt5中存在一些可以编写JSON的类,如你所愿。这是一个用于演示的小例子:
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonDocument>
#include <QDebug>
int main(int argc, char *argv[])
{
QJsonObject topQuery;
topQuery["objectType"] = QString("objects.Word");
QJsonObject parameters;
parameters["language"] = QString("en");
parameters["to"] = QString("ru");
parameters["rate"] = 0;
parameters["isInput"] = true;
topQuery["query"] = parameters;
QJsonObject sortParameter;
sortParameter["sortBy"] = QString("rate");
sortParameter["direction"] = QString("desc");
QJsonArray sortArray;
sortArray.append(sortParameter);
topQuery["sort"] = sortArray;
topQuery["limit"] = 10;
QJsonDocument document(topQuery);
qDebug() << document.toJson();
}
此代码的结果将是:
{
"limit": 10,
"objectType": "objects.Word",
"query": {
"isInput": true,
"language": "en",
"rate": 0,
"to": "ru"
},
"sort": [
{
"direction": "desc",
"sortBy": "rate"
}
]
}
对于Qt4,还存在具有simular api的库:http://qjson.sourceforge.net/。
之前我也在寻找没有依赖关系来创建json的C ++ lib,比如stl :: map,但我发现只有一个Qt变体。
答案 3 :(得分:0)
是的,非常神秘。这是用cJson做的:
cJSON *current_element = NULL;
char *current_key = NULL;
cJSON_ArrayForEach(current_element, object)
{
current_key = current_element->string;
if (current_key != NULL)
{
/* do something with the key */
}
}