问题描述
我正在尝试提取JSON键值(如果它们存在于列表中)。 我正在使用Python,但没有得到任何结果。 有什么明显的我想念的东西吗? 下面提供了虚拟JSON数据,.js和当前的Python代码以供参考。 谢谢!
{"int":1,"string":"Some string for int 1","date":"1969-1-1","metadata":"String metadata for int 1"}
{"int":2,"string":"Some string for int 2","date":"1969-1-2","metadata":"String metadata for int 2"}
{"int":3,"string":"Some string for int 3","date":"1969-2-1","metadata":"String metadata for int 3"}
{"int":4,"string":"Some string for int 4","date":"1970-1-1","metadata":"String metadata for int 4"}
{"int":5,"string":"Some string for int 5","date":"1969-1-1","metadata":"String metadata for int 5"}
我想使用“ int”键从该JSON文件中提取对象,这些键也出现在我创建的.js文件中。 .js文件看起来像:
2,5
因此,使用此伪数据,我想要的输出将是包含以下内容的新编写的JSON:
{"int":2,"string":"Some string for int 2","date":"1969-1-2","metadata":"String metadata for int 2"}
{"int":5,"string":"Some string for int 5","date":"1969-1-1","metadata":"String metadata for int 5"}
到目前为止,这是我的Python代码:
import json
import re
ids = open('dummy-ids.js', 'r').read().split(',')
dataset = set(ids)
with open('dummy2.json', 'r') as f:
data = json.load(f)
for obj in data:
if obj["id"] in dataset:
print(obj)
else:
print(str(obj["id"]) + " not found")
上面的代码导致找不到所有ID。 让我知道是否有任何不清楚的地方。 再次感谢!
1楼
您可以像这样遍历data
:
for obj in data:
if obj['id'] in listof500:
print(obj)
请注意,如果首先将listof500
转换为set,则in
运算符会更有效:
setof500 = set(listof500)
for obj in data:
if obj['id'] in setof500:
print(obj)
2楼
如果遵循您的代码,您应该是:
import json
import re
listof500 = open('desiredIDs.js', 'r').read().split(',')
with open('toomanyIDs.json', 'r') as f:
data = json.load(f)
for d in data.values():
if d["id"] in listof500:
print(each)
但是据我了解,您似乎正在找到Intersection。如果它是真实的,那么您可以这样做:
import json
import re
listof500 = open('desiredIDs.js', 'r').read().split(',')
with open('toomanyIDs.json', 'r') as f:
data = json.load(f)
ins = set([d["id"] for d in data.values()]) & set(listof500)