是否可以基于 C 或 C++ 中的 JSON 动态创建 if 语句
Is it possible to create if statement dynamically based on JSON in C or C++
我想知道有没有办法基于 JSON 在 C 或 C++ 中动态创建"if"语句。
例如,我有以下 JSON 输入
Rule1
{
"ifstatement1": {
"condition1": 0,
"condition2": "down"
},
"actionstatement1": {
"val1": 235959,
"val2": "yes",
"val3": 5,
"val4": 0,
"val5": "increse",
"val6": 1
}
}
Rule2
{
"ifstatement2": {
"condition1": 2,
"condition2": "up",
"condition3": 10
},
"actionstatement2": {
"val1": 1223,
"val2": "no",
"val3": 5
}
}
基于上述 JSON 输入,我需要使用 C 或 C++ 动态创建 if 语句。必须解析上面的 json 数据并将其视为 C 或 C++ 中的实际 if-else 语句。
任何像"ifstatement1"这样的内容都应该转换为条件检查,如果此检查为真,则必须应用"actionstatement1"中存在的值。
if语句和操作语句的数量可以动态变化。
在 C 或 C++ 中是否有任何特定的方法来动态评估 json 数据作为参数?
这就像我们以 JSON 格式给出的规则。此规则应在程序启动时存储,并将在特定时间段内使用当前值和存储值进行检查。如果任何条件匹配,则应用该条件的值。
如果有更好的方法,请分享。
因此,如果您正在考虑在C++
代码中即时或在编译代码后创建if
语句,答案是您无法这样做。您可以创建为您准备好if
语句的解析器。请记住,C 和 C++ 是编译语言,这意味着您在代码中输入的内容会被编译为 0 和 1,当您运行它时,这些 0 和 1 会在为您加载的内存中。
你应该指定你想要达到的条件,并决定使用 C 或 C++否则你的问题太笼统了。
你的也不像一个合适的 JSON:什么是Rule1
?是钥匙吗?那么它应该是类似于{"Rule1" :{...}}
的东西,内部结构应该是相同的,例如"ifstatement"
而不是"ifstatement1"
和"ifstatement2"
,"actionstatemen"
而不是"actionstatement1"
"actionstatement2"
我将假设您的 JSON(不是您发布方式的 JOSN)具有以下形式:
[
{
"id" : "Rule1",
"ifstatement": {
"condition1": 0,
"condition2": "down"
},
"actionstatement": {
"val1": 235959,
"val2": "yes",
"val3": 5,
"val4": 0,
"val5": "increse",
"val6": 1
},
{
"id": "Rule2",
"ifstatement": {
"condition1": 2,
"condition2": "up",
"condition3": 10
},
"actionstatement": {
"val1": 1223,
"val2": "no",
"val3": 5
}
}
]
C++中有不同的库允许这样做。其中之一是JSONcpp
(我下载了源代码,但也许如果你在Unix/Linux上,你可以安装一个二进制版本。
我用来阅读它的代码是这样的:
Json::Value root;
std::string dataFileName = "yourPath/filename.json"
if( access( dataFileName.c_str(), F_OK ) != -1 )
{
std::ifstream file(dataFileName);
file >> root;// file exists
for (Json::Value::ArrayIndex i = 0; i != root.size(); i++)
{
for (Json::Value::ArrayIndex j = 0; j != root[i]["ifstatement"].size(); j++)
{
(root[i]["ifstatement"][j] );
...
}
}
}
所以基本上root
代表你所有的文件,Json::Value::ArrayIndex j
允许迭代你的 JSON 文件的类型,就我如何重写它最外部的结构是一个数组。然后,您可以按以下方式访问字段:root[0]
等效于原始 RUle1,然后指定密钥:例如root[0]["ifstatement"]
。如果必须将 JSON 文件中的值转换为整数,则应使用方法asInt()
或asFloat()
for float。
由于你的问题太笼统了,我无法帮助你进一步:(
正如其他人从评论和用户 Gox 的回答中所说的那样; 您不能动态创建if statements
动态或动态说话。
但是,在阅读您的评论或回复他人后:
这是示例条件。 然后
if (condition1 == 0 && !strcmp(condition2, "down") )
执行操作。 条件 1 值可以是 0,1,2...根据这些价值观,行动会有所不同。
这为我提供了有关您要实现的目标的更多信息。正如其他人所说,您可能必须编写一个解析器才能为您准备好if statements
,但是如果您从JSON
中获取输入并创建关系树,例如:
Initial Condition: Determining Condition: Action To Perform:
condition1 == 0: !strcmp(condition2, "down") perform desired action
condition1 == 0: next condition perform desired action
...
condition1 == 1: ... ...
...
condition1 == 2: ... ...
您应该能够创建某种键结构,例如使用std::multimap
或类似的东西来构建表。
- JSON转换为nlohmann JSON-lib中的结构数组
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何将 json 数据附加到 Qt 中的现有 json 文件中
- 可以在JSON文件的帮助下在Qt中创建UI表单
- 有没有办法从Makefile访问VS Code c_cpp_properties.json文件中的定义
- C++-JSON::值用作函数参数中的重新引用
- C++中的 Json:将数字解析为字符串以避免浮点不准确
- 使用 Json 转换器反序列化 WCF 服务中的C++字符串
- 如何正确解析 Java+C++ TCP 连接中的 JSON 对象?
- 如何使用 C++ 中的 cpprestsdk 发布 json 数据并从本地服务器获取响应
- 如何使用 boost 属性树来解析 boost 中 json 字符串中的数组中的元素?
- Visual Studio Code C++ 删除 c_cpp_properties.json 中的"定义"
- 比较 JSON::Value 变量中的数据,然后更新到文件
- 计算 JSON 中的条目数并相应地执行代码
- 如何使用Qt处理JSON中的编码西里尔字母数据
- toString():JSON 中的数字
- 如何使用rapidjson浏览.json中的数组?(椰子2d-x)
- QT:如何从服务器替换JSON中的数字(开始,结束)
- 如何使用c++解析json中的嵌套数组
- 访问nlohmann json中的元素