需要帮助从存储抽象语法的JSON中提取信息吗

2024-10-06 13:34:45 发布

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

{
    "id": "9",
    "children": [{
        "id": "8",
        "children": [{
            "id": "7",
            "children": [{
                "id": "6",
                "children": [
                    {
                        "id": "0",
                        "type": "isPathForward"
                    },
                    {
                        "id": "2",
                        "children": [{
                            "id": "1",
                            "type": "maze_moveForward"
                        }],
                        "type": "DO"
                    },
                    {
                        "id": "5",
                        "children": [{
                            "id": "4",
                            "children": [{
                                "id": "3",
                                "type": "turnLeft"
                            }],
                            "type": "maze_turn"
                        }],
                        "type": "ELSE"
                    }
                ],
                "type": "maze_ifElse"
            }],
            "type": "DO"
        }],
        "type": "maze_forever"
    }],
    "type": "program"
}

上面有效的JSON基本上是一个AST(抽象语法树),我只想按以下顺序提取“type”:1)node后跟2)Left child,然后3)Right child

对于上述JSON,与下面完全相同:

Program
maze_forever
DO
maze_ifElse
isPathforward
Do
maze_moveForward
Else
maze_turn
turn_Left

我没有使用json,我尝试在python中使用生成器,但在转换为dict的过程中顺序丢失了。
你能为此编写一个python实现吗?你知道吗

更新!!!!你知道吗

到目前为止,我已经尝试了:

导入json json\u字符串=json.loads文件(高于json)

when i type :
for i in json_string:
...     print(i)
...


OUTPUT


type
id
children

我也试过了

import pandas as pd
 d=pd.read_json('{    "id": "9",    "children": [{        "id": "8",        "children": [{            "id": "7",            "children": [{                "id": "6",                "children": [                    {                        "id": "0",                        "type": "isPathForward"                    },                    {                        "id": "2",                        "children": [{                            "id": "1",                            "type": "maze_moveForward"                        }],                        "type": "DO"                    },                    {                        "id": "5",                        "children": [{                            "id": "4",                            "children": [{                                "id": "3",                                "type": "turnLeft"                            }],                            "type": "maze_turn"                        }],                        "type": "ELSE"                    }                ],                "type": "maze_ifElse"            }],            "type": "DO"        }],        "type": "maze_forever"    }],    "type": "program"}')


>>> d
output :
                                           children  id     type
0  {'type': 'maze_forever', 'id': '8', 'children'...   9  program

以上两种情况:

我不知道如何递归地进入孩子们,因为每个孩子都有一个或多个孩子在里面。我搜索的大多数答案都没有解释像上面我的JSON那样嵌套的JSON。你知道吗


Tags: idjsontype孩子programdoturnchildren
1条回答
网友
1楼 · 发布于 2024-10-06 13:34:45

最明显的实现是递归函数:

>>> def process(data):
...     if 'type' in data: print data['type']
...     if 'children' in data:
...         for child in data['children']:
...             process(child)
...
>>> j = json.load(open('test.json', 'r'))
>>> process(j)
program
maze_forever
DO
maze_ifElse
isPathForward
DO
maze_moveForward
ELSE
maze_turn
turnLeft

注意,我们正在打印当前结构的类型,然后我们递归到子结构中。你知道吗

相关问题 更多 >