- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试解析用 PHP 编码并通过 TCP 发送到 C++ 客户端的 JSON 字符串。
我的 JSON 字符串是这样的:
{"1":{"name":"MIKE","surname":"TAYLOR"},"2":{"name":"TOM","surname":"JERRY"}}
在 C++ 客户端上,我使用的是 jsoncpp 库:
void decode()
{
string text = {"1":{"name":"MIKE","surname":"TAYLOR"},"2":{"name":"TOM","surname":"JERRY"}};
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( text, root );
if ( !parsingSuccessful )
{
cout << "Error parsing the string" << endl;
}
const Json::Value mynames = root["name"];
for ( int index = 0; index < mynames.size(); ++index )
{
cout << mynames[index] << endl;
}
}
问题是我没有得到任何输出,甚至没有关于解析的错误(如果有的话)。你能帮我理解我做错了什么吗?
最佳答案
您的问题是:没有root["name"]。你的文件应该是这样的:
{ "people": [{"id": 1, "name":"MIKE","surname":"TAYLOR"}, {"id": 2, "name":"TOM","surname":"JERRY"} ]}
你的代码是这样的:
void decode()
{
string text ="{ \"people\": [{\"id\": 1, \"name\":\"MIKE\",\"surname\":\"TAYLOR\"}, {\"id\": 2, \"name\":\"TOM\",\"surname\":\"JERRY\"} ]}";
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( text, root );
if ( !parsingSuccessful )
{
cout << "Error parsing the string" << endl;
}
const Json::Value mynames = root["people"];
for ( int index = 0; index < mynames.size(); ++index )
{
cout << mynames[index] << endl;
}
}
如果您想保持数据不变:
void decode()
{
//string text ="{ \"people\": [{\"id\": 1, \"name\":\"MIKE\",\"surname\":\"TAYLOR\"}, {\"id\": 2, \"name\":\"TOM\",\"surname\":\"JERRY\"} ]}";
string text ="{ \"1\": {\"name\":\"MIKE\",\"surname\":\"TAYLOR\"}, \"2\": {\"name\":\"TOM\",\"surname\":\"JERRY\"} }";
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse( text, root );
if ( !parsingSuccessful )
{
cout << "Error parsing the string" << endl;
}
for( Json::Value::const_iterator outer = root.begin() ; outer != root.end() ; outer++ )
{
for( Json::Value::const_iterator inner = (*outer).begin() ; inner!= (*outer).end() ; inner++ )
{
cout << inner.key() << ": " << *inner << endl;
}
}
}
直接遍历根对象,使用迭代器(不要把它当作一个数组。
如果 Json::Reader 不起作用,请尝试使用 Json::CharReader:
void decode()
{
string text ="{\"1\":{\"name\":\"MIKE\",\"surname\":\"TAYLOR\"},\"2\":{\"name\":\"TOM\",\"surname\":\"JERRY\"}}";
Json::CharReaderBuilder builder;
Json::CharReader * reader = builder.newCharReader();
Json::Value root;
string errors;
bool parsingSuccessful = reader->parse(text.c_str(), text.c_str() + text.size(), &root, &errors);
delete reader;
if ( !parsingSuccessful )
{
cout << text << endl;
cout << errors << endl;
}
for( Json::Value::const_iterator outer = root.begin() ; outer != root.end() ; outer++ )
{
for( Json::Value::const_iterator inner = (*outer).begin() ; inner!= (*outer).end() ; inner++ )
{
cout << inner.key() << ": " << *inner << endl;
}
}
}
关于c++ - 使用 jsoncpp 解析 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47283908/
我现在才使用jsonCPP库几个月。我试图添加和删除数组中的对象。香港专业教育学院在不同的平台上使用了许多不同的JSON库,但我发现使用JsonCPP很难。 这是杰森: { "type": "Di
我正在尝试创建一个 json cpp 数组并用 std::vector 中的数据填充它。 我的代码是这样的 void Box_20::BuildCommitUploadPostData(const P
strcpy(this->encoding, jsonvalue.get("encoding", "").asCString()); 我需要在我的程序中使用 json 数据,昨天我使用 nuGet 下
我正在使用 v1.6.2 上的 jsoncpp 库Win32 平台。一切正常,我可以解析 json 并访问 Json:Values成功使用 v.["firstname"]等等。 问:我如何找到 Jso
我正在使用 C++ 中的 json,并决定试用 Jsoncpp。在我的 json 中,我有一些以科学计数法表示并包含负指数的值,例如 4.0e-06。当我去解析这个 json 字符串时,我得到了奇怪的
我在 JSONcpp 中有一个根,具有这样的字符串值。 Json::Value root; std::string val = "{\"stringval\": \"mystring\"}"; Js
我在使用 jsoncpp 时遇到问题.代码如下: Json::Value content; for ( int i=0; i < len; ++i) { content["res"].appe
我正在尝试将 JSON cpp 与 VS2008 一起使用。 谁能告诉我是否可以将二进制数据打包成 JSON 格式?我正在将图像文件读入 char* buffer,并将其放入 JSON::Value。
我正在使用 JSONCPP 记录我在服务器上收到的消息,但它没有附加消息,而是替换了最后一条消息。这是我的代码:ofstream 和 event 是私有(private)成员。 //std::of
我在 jsoncpp 查找了代码示例.对于成员数组,即下面 json 数据中的“插件” { // Default encoding for text "encoding" : "UTF
问题描述 我正在尝试为 JsonCpp 编写包装器.我的包装器必须具有以下功能 解析(const string& input) GetString(string& output, const stri
我最近升级到 JsonCpp 版本 1.6.5。 我注意到小数点后的数字为零的 float 在打印时会被截断。例如 2.0 打印为 2 我使用的以前的版本 (v0.6.0) 没有这样做。 这种行为是预
我正在使用 Jsoncpp 通过 Json::FastWriter 将 Json::value 写入字符串。 string s; s.append("me?json="); val["firstnam
我正在使用 jsoncpp 读取 JSON 文件。当我写回文件时,我的浮点值略有偏差。为了进行测试,我决定将文件解析为 Json::Value,然后将该值写回到文件中。我希望它看起来一样,但浮点值不同
我有这个 JSON 对象: {"books":[ { "author" : "Petr", "book_name" : "Test1", "pages" :
所以我最近安装了 JSONCPP,出于某种原因,当我尝试这段代码时它给了我错误: #include #include #include int main(){ bool alive =
我正在尝试使用 jsoncpp 的合并版本(最新版本),但它会产生 Unresolved external symbol 链接错误。我使用的代码是 #include int main(){ J
我的 json 对象中有一个列表,我想遍历列表中的元素我看到了以下帖子Iterating through objects in JsonCpp , 但这对我不起作用 我的 json 对象: {
JSONCPP 有一个编写器,但它似乎所做的只是从解析器获取信息,然后将其输出到字符串或流中。如何让它改变或创建新的对象、数组、值、字符串等并将它们写入文件? 最佳答案 #include 代码:
本文实例讲述了C++解析Json的方法。分享给大家供大家参考,具体如下: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,和xml类似,本文主要对VS
我是一名优秀的程序员,十分优秀!