Javascript 将JSON转换为用户可读的文本

Javascript 将JSON转换为用户可读的文本,javascript,Javascript,我需要关于将JSON转换为用户可读文本的帮助 示例JSON: { "condition": "or", "rules": [{ "field": "X", "operator": "IN", "value": ["A", "B"] }, { "field": "Y", "operator": "IN", "

我需要关于将JSON转换为用户可读文本的帮助

示例JSON:

{
    "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.