因此,我正在尝试获取标记名称的标记,该标记包含一个包含在循环的前面定义的搜索变量的标记。父标记始终是不同的。 继承人的json即时通讯的结构。
{
"Data" : {
"Site" : {
"RandomID I don't want" : {
"Service" : {
"RandomID I want" : "Namers"
},
"title" : "(The string im searching for)"
}
以此类推...
所以我尝试缩小结果
firebase = urlopen('firebase.json').read().decode('utf-8')
aniIndex = json.loads(firebase)
aniIndex2 = aniIndex.get("Data")
aniIndex3 = aniIndex2.get("Site")
print(aniIndex3) #Returns the section I want to search into
现在我的问题是我如何搜索标签,因为下一个标签是随机名称。因此,我想是否可以搜索“标题”的文本并检查其父标签。我试图找到一种方法来解决此问题,但对于我遇到的情况,没有任何解决方法
编辑:我搞砸了Json结构,已修复(抱歉,就像凌晨5点)
答案 0 :(得分:1)
这里有一些代码似乎可以满足您的要求。如果您需要所有带有title
标签的项目,请排除break
语句,然后对循环中想要的项目进行处理。
data = {
"Data": {
"Site": {
"RandomID I don't want": {
"Service": {
"RandomID I want": "Namers"
},
"title": "(The string im searching for)"
}
}
}
}
for v in data["Data"]["Site"].values():
if "title" in v:
if v["title"] == "(The string im searching for)":
id_i_want = list(v["Service"].keys())[0]
break
print("Id I want: '{}'".format(id_i_want))
输出:
Id I want: 'RandomID I want'
答案 1 :(得分:0)
我不会将其称为最佳解决方案,但这是一个可行的解决方案:
假设您的json看起来像这样:
print(d)
{
"Data": {
"Site": {
"(RandomId)": {
"Title": "Thing"
},
"(Text I want)": {
"Title": "(The string i'm searching for)"
}
}
}
}
然后具有两个递归函数:
def find_children(dic, value):
child, grandchild = '', ''
for k, v in dic.items():
if isinstance(v, dict):
child, grandchild = find_children(v, value)
if child:
break
else:
if value in v:
return k, v
return child, grandchild
def find_parent(dic, children):
parents = ''
for k, v in dic.items():
if isinstance(v, dict):
if children[0] in v.keys() and children[1] in v.values():
return k
else:
parents = find_parent(v, children)
return parents
您可以找到:
find_parent(d, find_children(d, "i'm searching"))
# '(Text I want)'
find_parent(d, find_children(d, "Thing"))
# '(RandomId)'