{"code":100,"errormessage":null,"data":"{\"total\":0,\"rows\"}"} C++ 正则表达式取data值
时间: 2023-09-02 20:05:44 浏览: 110
假设你已经将 JSON 字符串存储在一个名为 `jsonStr` 的字符串变量中,可以使用 C++11 引入的正则表达式库 `std::regex` 和 `std::smatch` 来提取 `data` 字段的值。
以下是示例代码:
```c++
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string jsonStr = R"({"code":100,"errormessage":null,"data":"{\"total\":0,\"rows\"}"})";
std::regex dataRegex(R"("data":(".*"))");
std::smatch match;
if (std::regex_search(jsonStr, match, dataRegex)) {
std::string dataStr = match[1].str();
std::cout << "data: " << dataStr << '\n';
} else {
std::cout << "data field not found\n";
}
return 0;
}
```
运行结果:
```
data: "{\"total\":0,\"rows\"}"
```
相关问题
{"code":100,"errormessage":null,"data":"{\"total\":0,\"rows\"}” C++ 正则取data值
这是一个 JSON 格式的字符串,你可以使用 C++ 的第三方库来解析 JSON,并获取其中的 data 值。
以下是使用 RapidJSON 库的示例代码:
```cpp
#include <iostream>
#include "rapidjson/document.h"
using namespace rapidjson;
int main() {
std::string jsonStr = R"({"code":100,"errormessage":null,"data":"{\"total\":0,\"rows\"}"})";
Document doc;
doc.Parse(jsonStr.c_str());
if (!doc.HasParseError() && doc.HasMember("data") && doc["data"].IsString()) {
std::cout << doc["data"].GetString() << std::endl; // 输出 {"total":0,"rows"}
}
return 0;
}
```
另外,如果你的 JSON 字符串格式比较固定,也可以使用正则表达式将 data 值提取出来。以下是一个使用正则表达式的示例代码:
```cpp
#include <iostream>
#include <regex>
int main() {
std::string jsonStr = R"({"code":100,"errormessage":null,"data":"{\"total\":0,\"rows\"}"})";
std::regex reg(R"("data":"(.+?)")");
std::smatch match;
if (std::regex_search(jsonStr, match, reg)) {
std::cout << match[1].str() << std::endl; // 输出 {"total":0,"rows"}
}
return 0;
}
```
这里使用了 C++11 引入的正则表达式库,需要在编译时加上 `-std=c++11` 或更高的选项。
{"total":0,"rows":[{"ROWNO":"1","家庭ID":"134116"}]} C++正则表达式取rows值
以下是使用 C++ 正则表达式取 rows 值的示例代码:
```c++
#include <iostream>
#include <regex>
#include <string>
int main() {
std::string input = R"({"total":0,"rows":[{"ROWNO":"1","家庭ID":"134116"}]})";
std::regex re(R"("rows":\[(.*)\])");
std::smatch matches;
if (std::regex_search(input, matches, re)) {
std::string rows_value = matches[1].str();
std::cout << rows_value << std::endl; // 输出:[{"ROWNO":"1","家庭ID":"134116"}]
} else {
std::cout << "No match" << std::endl;
}
return 0;
}
```
解释:
1. `input` 存储需要匹配的字符串。
2. `re` 存储正则表达式,其中 `(.*)` 匹配任意字符,使用 `\[(.*)\]` 可以匹配方括号内的字符串。
3. `std::regex_search` 函数用于查找匹配项,`matches` 存储匹配结果。
4. `matches[1].str()` 取出匹配到的第一个子表达式中的字符串,即 rows 值。
输出结果为 `[{"ROWNO":"1","家庭ID":"134116"}]`。
阅读全文