如何解析表示算术表达式的高度嵌套的json数据

2024-04-19 11:55:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想写一个Python程序,它可以接受JSON格式的算术表达式,解析和计算答案。你知道吗

像PLUS这样的每个操作符至少需要2个参数,MINS和TIMES正好需要2个参数,但是检查并不相关

我能够读取JSON对象,但困难的是我不明白如何使用递归来解析嵌套对象。你知道吗

任何指导/帮助/想法都会有帮助

我认为递归在这里是一件很好的事情,但是我不明白基本情况应该是什么,以及如何处理不同类型的操作(加、减、次)

{
    "root": { "description": "Result should be 8",      
        "plus": [{
            "times": [{
                "int": 2
            }, {
                "int": 3
            }]
        }, {
            "minus": [{
                "int": 4
            }, {
                "int": 2
            }]
        }]
    }

目标二给我带来更多问题

{
    "root": { "description":" it evaluates to 12.",     
        "plus": [{
                "plus": [{
                        "plus": [{
                                "plus": [{
                                        "plus": [{
                                                "int": 2
                                            },
                                            {
                                                "int": 2
                                            }
                                        ]
                                    },
                                    {
                                        "int": 2
                                    }
                                ]
                            },
                            {
                                "int": 2
                            }
                        ]
                    },
                    {
                        "int": 2
                    }
                ]
            },
            {
                "int": 2
            }
        ]
    }
}

我尝试了下面的代码,但它不能正确地处理嵌套表达式:

def operation():    
   val = 0    
   with open("expression1.json") as complex_data:
       data = complex_data.read()
       z = json.loads(data)

       data = z['root']    
       for op in data:
           if op == 'description':
               pass
           elif op == 'plus':
               return sum(element[k] for element in data[op] for k in element)
           elif op == 'minus' or op == 'times':
               if len(data[op]) != 2:
                   raise ValueError('2 elements expected if operation is minus >or times')
               nums = [element[k] for element in data[op] for k in element]
               if op == 'minus':
                   return abs(nums[0] - nums[1])
               else:
                   return nums[0]*nums[1]
           else:
               raise ValueError('Invalid operation') 

抱歉,这是我第一次使用堆栈溢出,我不知道如何格式化代码


Tags: infordatareturnifplusrootdescription