下面是我想要解析的一个示例提要:https://gdata.youtube.com/feeds/api/users/aniBOOM/subscriptions?v=2&alt=json
你可以通过http://json.parser.online.fr/看看它包含什么。
我在解析youtube提供的数据源时遇到了一个小问题。第一个问题是youtube提供feed字段中封装的数据的方式,因此我无法直接从原始json文件中解析用户名,所以我必须解析第一个条目字段,并从中生成新的json数据。
无论如何,问题是由于某种原因,它不包括超过第一个用户名,我不知道为什么,因为如果你检查在线解析器上的提要,条目应该包含所有用户名。
`
data = value["feed"]["entry"];
Json::StyledWriter writer;
std::string outputConfig = writer.write( data );
//This removes [ at the beginning of entry and also last ] so we can treat it as a Json data
size_t found;
found=outputConfig.find_first_of("[");
int sSize = outputConfig.size();
outputConfig.erase(0,1);
outputConfig.erase((sSize-1),sSize);
reader.parse(outputConfig, value2, false);
cout << value2 << endl;
Json::Value temp;
temp = value2["yt$username"]["yt$display"];
cout << temp << endl;
std::string username = writer.write( temp );
int sSize2 = username.size();
username.erase(0,1);
username.erase((sSize2-3),sSize2);
`但由于某种原因,[]fix也会剪切我生成的数据,如果我打印出数据而不删除[],我可以看到所有用户,但在这种情况下,我无法提取temp=value2["yt$username"]["yt$display"];
在JSON中,括号表示数组(此处引用不错)。您可以在在线解析器中看到这一点,也可以看到——对象(具有一个或多个键/值对{"key1": "value1", "key2": "value2"}
的项目)用蓝色+/-符号表示,数组(括号内的项目用逗号[{arrayItem1}, {arrayItem2}, {arrayItem3}]
分隔)用红色+/-符号表示。
由于条目是一个数组,您应该能够通过执行以下操作来遍历它们:
// Assumes value is a Json::Value
Json::Value entries = value["feed"]["entry"];
size_t size = entries.size();
for (size_t index=0; index<size; ++index) {
Json::Value entryNode = entries[index];
cout << entryNode["yt$username"]["yt$display"].asString() << endl;
}