如何在C++中解析JSON URL,替换en-us为ja-jp并获取日文页面标题
C++ 基于cpprestsdk实现JSON URL批量处理方案
功能需求
- 解析接口返回的JSON数据,仅修改
articleUrl字段中的en-us为ja-jp,其余格式的URL不做改动 - URL处理完成后,在对应层级新增
urltitle字段存储处理后的日文页面URL - 最终输出标准JSON格式的处理结果
规则说明
仅识别替换
articleUrl中的en-us字符串,不含该字段的URL(比如https://support.example.com/help/xxxx格式)直接保留原值存入urltitle即可
完整实现代码
#include <iostream> #include <cpprest/http_client.h> #include <cpprest/json.h> using namespace web; using namespace web::http; using namespace web::http::client; using namespace utility; // 字符串子串替换工具函数 string_t replace_substr(string_t input, const string_t& from, const string_t& to) { size_t start_pos = 0; while((start_pos = input.find(from, start_pos)) != string_t::npos) { input.replace(start_pos, from.length(), to); start_pos += to.length(); } return input; } int main(int argc, char** argv) { try { // 请求接口获取原始JSON数据 http_client client(U("http://api.example.com/")); http_response response = client.request(methods::GET, U("/get")).get(); if (response.status_code() != status_codes::OK) { std::cerr << "接口请求失败,状态码:" << response.status_code() << std::endl; return 1; } json::value root = response.extract_json().get(); // 遍历处理所有kbArticles条目 auto& value_arr = root.as_array(); for (auto& item : value_arr) { auto& kb_arr = item.at(U("kbArticles")).as_array(); for (auto& kb_item : kb_arr) { string_t original_url = kb_item.at(U("articleUrl")).as_string(); // 仅替换en-us为ja-jp string_t processed_url = replace_substr(original_url, U("en-us"), U("ja-jp")); // 新增urltitle字段 kb_item[U("urltitle")] = json::value::string(processed_url); } } // 输出处理后的JSON,可自行修改为写入本地文件的逻辑 std::wcout << root.serialize() << std::endl; } catch (const std::exception& e) { std::cerr << "处理出错:" << e.what() << std::endl; return 1; } return 0; }
编译参考
- Windows环境可通过vcpkg安装
cpprestsdk依赖后直接编译 - Linux环境可先安装
libcpprest-dev包,编译命令示例:g++ main.cpp -o url_processor -lcpprest -lssl -lcrypto -lboost_system
内容的提问来源于stack exchange,提问作者Evening_cry_007
相关产品推荐
相关产品推荐

