前言
有很多网站均提供在线解析json文件的功能,比如(json.cn),可以分析出一段未知的json字符串,提取其中的键值对。
本博客使用 jsoncpp 开源库来实现json字符串的盲解,即,在不知道“键”的情况下找出“键”及其对应的“值”。
代码
jsonRWtest.h
#ifndef JSONRWTEST_H
#define JSONRWTEST_H
#include <iostream>
#include <json/reader.h>
#include <QString>
#include <string>
class JsonRWtest
{
public:
JsonRWtest();
void readJsonFromStr();
private:
Json::Reader reader;
Json::Value root;
QString strJson;
};
#endif // JSONRWTEST_H
jsonRWtest.cpp
#include "jsonRWtest.h"
using namespace std;
using namespace Json;
JsonRWtest::JsonRWtest()
{
strJson = "{\"name\": \"json\",\"array\": [{\"cpp\": \"jsoncpp1\",\"java\": \"java1\",\"php\": \"php1\"},{\"cpp\": \"jsoncpp2\","
"\"java\": \"java2\",\"php\": \"php2\"},{\"cpp\": \"jsoncpp2\",\"java\": \"java2\",\"php\": \"php2\"}]}";
/*
{
"name": "json",
"array": [
{
"cpp": "jsoncpp1",
"java": "java1",
"php": "php1"
},
{
"cpp": "jsoncpp2",
"java": "java2",
"php": "php2"
},
{
"cpp": "jsoncpp2",
"java": "java2",
"php": "php2"
}
]
}
*/
}
void JsonRWtest::readJsonFromStr()
{
bool ret = reader.parse(strJson.toStdString(),root);
if (ret)
{
Value::Members members = root.getMemberNames();
foreach (string a, members) {
if (root[a].isArray())
{
Json::Value::Members member;//Members vector<string>
for (Json::Value::iterator itr = root[a].begin(); itr != root[a].end(); ++itr)
{
member = (*itr).getMemberNames();
for (Json::Value::Members::iterator iter = member.begin(); iter != member.end(); ++iter)
{
string str_temp = (*itr)[(*iter)].asString();
cout << (*iter) << " : "<< str_temp << endl;
}
}
}
else
cout << a << " : " << root[a].asString() << endl;
}
}
}
执行结果
cpp : jsoncpp1
java : java1
php : php1
cpp : jsoncpp2
java : java2
php : php2
cpp : jsoncpp2
java : java2
php : php2
name : json