Javascript 将JSON转换为用户可读的文本
我需要关于将JSON转换为用户可读文本的帮助 示例JSON:Javascript 将JSON转换为用户可读的文本,javascript,Javascript,我需要关于将JSON转换为用户可读文本的帮助 示例JSON: { "condition": "or", "rules": [{ "field": "X", "operator": "IN", "value": ["A", "B"] }, { "field": "Y", "operator": "IN", "
{
"condition": "or",
"rules": [{
"field": "X",
"operator": "IN",
"value": ["A", "B"]
},
{
"field": "Y",
"operator": "IN",
"value": ["C", "D"]
},
{
"condition": "and",
"rules": [{
"field": "X",
"operator": "IN",
"value": ["F", "G"]
},
{
"condition": "and",
"rules": [{
"field": "Z",
"operator": "IN",
"value": ["R", "S"]
}]
}
]
},
{
"field": "I",
"operator": "IN",
"value": ["D", "K"]
}
]
}
预期产出:
X in('A','B') OR Y in('C','D') OR ( X in('F','G') and ( Z in('R','S') ) ) OR I in('D','K')
提前感谢您的帮助。嗯,这看起来像是一个有趣的挑战,所以我做了,然后不小心按下了提交按钮,就这样。我将把它留给OP来研究它是如何工作的
const data={“condition”:“or”,“rules”:[{“field”:“X”,“operator”:“IN”,“value”:[“A”,“B”]},{“field”:“Y”,“operator”:“IN”,“value”:[“C”,“D”]},{“condition”:“X”,“operator”:“IN”,“value”:“IN”,“value”:[“value”:[“F”,“G”]},{“condition”:“和”,“rules”:[{“field”:“Z”,“operator”:“IN”,“value”:[“R”,“S”}]},{“字段”:“I”,“运算符”:“IN”,“值”:[“D”,“K”]}]};
const expect=“X in('A','B')或Y in('C','D')或(X in('F','G'))和(Z in('R','S'))或I in('D','K')”;
常量utils={
引号{return`${s}`},
解析(obj){
返回解析器[obj.condition | | obj.operator](obj);
}
};
常量分析器={
或(obj){
返回obj.rules.map(utils.parse.join)(“OR”);
},
及(obj){
返回`(${obj.rules.map(utils.parse.join(“and”)})`;
},
IN(obj){
在(${obj.value.map(utils.quote).join(“,”)中返回“${obj.field}”;
}
};
const result=utils.parse(数据);
log(`match?${result==expect}`);
console.log(result);
您尝试过什么吗?如果您不告诉我们您的具体位置,那么很难帮助您。欢迎使用SO。请理解SO不是免费的编码服务。您必须自己尝试解决问题。如果您无法使其工作,请发布您尝试过的内容,我们将帮助您解决问题。
getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
if (!obj.hasOwnProperty(i)) continue;
if (typeof obj[i] == 'object') {
objects = objects.concat(this.getObjects(obj[i], key, val));
} else
if (i == key && obj[i] == val || i == key && val == '') { //
objects.push(obj);
} else if (obj[i] == val && key == '') {
if (objects.lastIndexOf(obj) == -1) {
objects.push(obj);
}
}
}
return objects;
}
I was able to break JSON into separate objects but stuck on combining those objects with the conditional operator and also to preserve the hierarchy. Thank you doodle for your answer.