如何搜索关键字并打印它周围的所有内容,但仍然在{}括号之间

2024-09-24 22:28:00 发布

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

我有绳子

{"quests ":
    [{
         "title ":"Phite Club",
         "status": "COMPLETED",
         "difficulty": 3,
         "members": True,
         "questPoints": 1,
         "userEligible": True
    },{
         "title": "All Fired Up",
         "status": "COMPLETED",
         "difficulty": 1,
         "members": True,
         "questPoints": 1,
         "userEligible": True
    }]
}

我想搜索All Fired Up并使输出为:

{"title": "All Fired Up", 
 "status": "COMPLETED",
 "difficulty": 1,
 "members": True,
 "questPoints": 1,
 "userEligible": True}

我不一定需要输出中的引号或{},但无论哪种方式,我都需要数据。你知道吗

我的格式是穷人,但任何帮助是感激的,谢谢!你知道吗


Tags: truetitlestatusallupmembersclub绳子
3条回答

您有一个JSON字符串。您应该将其解析为python,然后搜索匹配项。你知道吗

data = json.loads(mystring)
target = next(item for item in data if item["title"] == "All Fired Up")
string = ".... your string ..."
data = [ s.split("}")[0] for s in string.split("{") if "All Fired Up" in s ]

修改问题的答案

让我们来定义你的字典:

>>> d = {"quests ":
...     [{
...          "title ":"Phite Club",
...          "status": "COMPLETED",
...          "difficulty": 3,
...          "members": True,
...          "questPoints": 1,
...          "userEligible": True
...     },{
...          "title": "All Fired Up",
...          "status": "COMPLETED",
...          "difficulty": 1,
...          "members": True,
...          "questPoints": 1,
...          "userEligible": True
...     }]
... }

要检索您感兴趣的部分:

>>> [y for dd in d.values() for y in dd if y.get('title') == 'All Fired Up']
[{'questPoints': 1, 'title': 'All Fired Up', 'status': 'COMPLETED', 'userEligible': True, 'members': True, 'difficulty': 1}]

或者,如果你提前知道你要找的是quests

>>> [y for y in d['quests '] if y.get('title') == 'All Fired Up']
[{'questPoints': 1, 'title': 'All Fired Up', 'status': 'COMPLETED', 'userEligible': True, 'members': True, 'difficulty': 1}]

问题原版答案

让我们定义字符串:

>>> s = '"{"quests":[{"title":"Phite Club","status":"COMPLETED","difficulty":3,"members":true,"questPoints":1,"userEligible":true},{"title":"All Fired Up","status":"COMPLETED","difficulty":1,"members":true,"questPoints":1,"userEligible":true},"'

让我们提取您想要的部分:

>>> import re
>>> re.findall(r'\{[^}]*All Fired Up[^}]*\}', s)
['{"title":"All Fired Up","status":"COMPLETED","difficulty":1,"members":true,"questPoints":1,"userEligible":true}']

正则表达式\{[^}]*All Fired Up[^}]*\}匹配All Fired Up及其周围的所有字符,包括前面最近的{和后面的}。你知道吗

[注意,在问题的当前版本中,字典的键quests后面有一个空格quests。上面的代码

JSON问题

当我写这个答案时,问题中的字符串是不是有效的JSON。如果在以后的更新中,它被一个有效的JSON字符串替换,那么Daniel Roseman's answer就变得合适了。你知道吗

相关问题 更多 >