我有以下JSON:
{
"condition": "AND",
"rules": [
{
"condition": "OR",
"rules": [
{
"id": "u.url",
"operator": "contains",
"value": "URL_A"
},
{
"id": "u.url",
"operator": "contains",
"value": "URL_B"
}
]
},
{
"condition": "OR",
"rules": [
{
"id": "u.url",
"operator": "contains",
"value": "URL_C"
},
{
"id": "u.url",
"operator": "contains",
"value": "URL_D"
}
]
}
]
表示布尔公式:(A or B) and (C or D)
其中A
例如是此JSON对象:
{
"id": "u.url",
"operator": "contains",
"value": "URL_A"
}
通常,JSON文件可以表示具有(仅)AND和OR运算符的任何布尔逻辑。
问题是返回表示原始公式的产品总和的字符串。那就是:(A or C) and (A or D) and (B or C) and (B or D)
。
例如,结果将是:
(u.url contains URL_A) OR (u.url contains URL_C) AND
(u.url contains URL_A) OR (u.url contains URL_D) AND
(u.url contains URL_B) OR (u.url contains URL_C) AND
(u.url contains URL_B) OR (u.url contains URL_D)
答案 0 :(得分:1)
Python有一个json库,可以将您的Json数据转换为字典列表。您可以实现一个能够输出SOP的递归函数。
例如:
>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'
如果您使用DFS递归到基地,您可以找到基本表达式并按照自己的方式进行备份。
通过词典列表,直到你达到一个基本状态(即dict没有条件字段。
然后备份并采用这两个规则并对其应用操作。这可以通过一个带有两个字典并返回字符串的函数来完成。
由于您正在进行DFS,因此您将进入下一个分支,并发现您返回C或D'。
然后你将留下根,这两个分支将合并在一起。
这一切都说,如果你不熟悉递归和DFS以及如何在Python中实现这个问题基本上就变成了,嘿,有人为我实现了一个完整的python实现"
为了帮助您进一步发布,请发布可以审核的代码。我怀疑是否有人会为此发布完全实现的代码。