当前位置: 代码迷 >> python >> 如果列表中存在JSON键值,如何返回?
  详细解决方案

如果列表中存在JSON键值,如何返回?

热度:92   发布时间:2023-07-14 09:52:36.0

我正在尝试提取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。 让我知道是否有任何不清楚的地方。 再次感谢!

您可以像这样遍历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)

如果遵循您的代码,您应该是:

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)
  相关解决方案