C++ 如何使用jsonCpp查找JSON数据中的对象数或数组数
我的主要需求是如何在顶级数据中找到元素的数量 给定json数据:C++ 如何使用jsonCpp查找JSON数据中的对象数或数组数,c++,json,jsoncpp,C++,Json,Jsoncpp,我的主要需求是如何在顶级数据中找到元素的数量 给定json数据: { [ {Key11:Value11,Key12:Value12,...Key1N:Value1N}, {Key21:Value21,Key22:Value22,...Key2N:Value2n}, {Key31:Value31,Key32:Value32,...Key3N:Value3N}, {Key41:Value41,Key42:Value42,...Key4N:Value4N}, . . .
{
[
{Key11:Value11,Key12:Value12,...Key1N:Value1N},
{Key21:Value21,Key22:Value22,...Key2N:Value2n},
{Key31:Value31,Key32:Value32,...Key3N:Value3N},
{Key41:Value41,Key42:Value42,...Key4N:Value4N},
.
.
.
KeyZ1:ValueZ1,KeyZ2:ValueZ2,...KeyZN:ValueZN}
]
}
如何在Json数据中找到数组元素的数量
此外,根据jason的数据:
{
{Key11:Value11,Key12:Value12,...Key1N:Value1N}
}
如何在json数据中找到键值元素的数量?您可以使用
json::value
对象的size
成员函数,如下所示。你的数据不可行,所以我从其他地方得到了一些,但我想你会看到它们的共同点
您发布的json
数据语法不正确。要使其有效,必须命名列表元素或删除外部的{}
。我已经为这两种可能性提供了解决方案
#include <cstdio>
#include <cstring>
#include <iostream>
#include "json/json.h"
using namespace std;
void named()
{
string txt = "{ \
\"employees\": [{ \
\"firstName\": \"John\", \
\"lastName\": \"Doe\" \
}, { \
\"firstName\": \"Anna\", \
\"lastName\": \"Smith\" \
}, { \
\"firstName\": \"Peter\", \
\"lastName\": \"Jones\" \
}] \
}";
Json::Value root;
Json::Reader reader;
bool ok = reader.parse(txt, root, false);
if(! ok)
{
cout << "failed parse\n";
return;
}
cout << "parsed ok\n";
// Answer to question 1
cout << "The employee list is size " << root["employees"].size() << '\n';
for(const auto& jv: root["employees"])
{
// Answer to your second question
cout << "employee " << jv["firstName"] << " has " << jv.size() << " elements\n";
}
}
void unnamed()
{
string txt2 = "[{ \
\"firstName\": \"John\", \
\"lastName\": \"Doe\" \
}, { \
\"firstName\": \"Anna\", \
\"lastName\": \"Smith\" \
}, { \
\"firstName\": \"Peter\", \
\"lastName\": \"Jones\" \
}]";
Json::Value root;
Json::Reader reader;
bool ok = reader.parse(txt2, root, false);
if(! ok)
{
cout << "failed parse\n";
return;
}
cout << "parsed ok\n";
// Answer to question 1
cout << "The employee list is size " << root.size() << '\n';
for(const auto& jv: root)
{
// Answer to your second question
cout << "employee " << jv["firstName"] << " has " << jv.size() << " elements\n";
}
}
int main()
{
named();
unnamed();
}
#包括
#包括
#包括
#包括“json/json.h”
使用名称空间std;
名为()的空
{
字符串txt=“{\
\“雇员\”:[{\
\“firstName\”:“John\”\
\“lastName\”:\“Doe\”\
}, { \
\“firstName\”:“Anna\”\
\“姓氏\”:“史密斯\”\
}, { \
\“firstName\”:“Peter\”\
\“姓氏”:“琼斯”\
}] \
}";
Json::值根;
Json::阅读器;
bool ok=reader.parse(txt,root,false);
如果(!ok)
{
假设samlejson数据没有employee标签。假设它只是从列出第一个有效json的NAI开始?如果删除外部的{}集,它就有效了
。因此,假设您的samlejson数据没有员工标签。假设它只是从列出名字和姓氏开始。或者这是不允许的。如何实现.y quest的目标。我实际上已经知道您所使用的示例的答案。如果您删除员工标签并将key:value列为数组,您会怎么做解决方案是。您是否尝试了我更新的答案?您只需在任何想要大小的节点上调用大小。如果使用“仅数组”选项,则数组本身就是根节点。