gpt4 book ai didi

c++ - 使用 jsoncpp 时从 JSON 中剥离私有(private)数据的最佳方法

转载 作者:行者123 更新时间:2023-11-30 02:24:23 25 4
gpt4 key购买 nike

问题很简单。一些 JSON 数据与服务器交换。由于通信非常复杂,我需要记录尽可能复杂的信息,看看是否:

  • 服务器发送代码省略的新值
  • 已发送有拼写错误的 JSon
  • 等等

但与此同时,任何私有(private)数据都应该被虚拟数据遮蔽。

所以改为在日志中查看:

{
"secuityToken" : "asdasdgas234fsdfsaD",
"message" : "user private message"
}

应该看到这样的东西:

{
"secuityToken" : "********",
"message" : "*******"
}

我的代码是 C++,所以正在使用 jsoncpp。我能看到的最好的方法是:

bool ProcessServerMessage(const std::string& message)
{
Json::Value jsonValue;
Json::Reader reader;
if (reader.parse(sMessage, jsonValue, false))
{
auto logValue = ShadowPrivateData(jsonValue, listOfKeysWithPrivateData);
LOG() << " JSOn recived: " << logValue;

}

问题 ShadowPrivateData 应该是什么样子,才最通用?

最佳答案

对我来说,这里一个简单的方法就足够了。只需调用 ShadowPrivateDatajsonValue 的所有成员递归.在每个递归步骤中,您应该确定是否 jsonValue是数组、对象或两者都不是,并正确地遍历它。使用 isArray isObject 为此。

当遍历对象或数组的字段时,如果该字段不是聚合(对象或数组),请在 listOfKeysWithPrivateData 中搜索它的名称.如果在列表中找到字段名称,确定字段的类型(使用 isString isDouble isIntegral 等)并用适当的值替换字段:用星号替换字符串,用零替换数字等。

声明listOfKeysWithPrivateData作为std::set<std::string>或类似的东西来执行对数搜索而不是线性搜索。

如何遍历聚合对象?使用 getMemberNames 对于对象和 size 对于数组。换句话说,jsoncpp 提供了完整的 json 对象自省(introspection)方法集合。

正确实现后,此方法应审查 jsonValue 中的所有敏感数据忽略它的复杂性。

关于c++ - 使用 jsoncpp 时从 JSON 中剥离私有(private)数据的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45433066/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com