Python 在json中搜索特定值
我尝试使用Python3在json中搜索特定变量。结果通常是这样的Python 在json中搜索特定值,python,json,python-3.x,Python,Json,Python 3.x,我尝试使用Python3在json中搜索特定变量。结果通常是这样的 [ { "string": "00002000", "existedPrior": true }, { "string": "00002001", "existedPrior": false }, { "string": "00002002", "existedPrior": true }, { "string": "00002003",
[
{
"string": "00002000",
"existedPrior": true
},
{
"string": "00002001",
"existedPrior": false
},
{
"string": "00002002",
"existedPrior": true
},
{
"string": "00002003",
"existedPrior": true
},
{
"string": "00002004",
"existedPrior": false
}
]
该脚本的目标是在“existedPrior”为false的位置搜索这些值,然后从该值中获取字符串并将其插入数组中。然后,我可以稍后获取数组的值,并针对另一个端点重新查询它们以获取更多数据
从我收集的资料来看,这有点接近我希望做的事情,但实际上并没有让我达到目的
import json
import requests
q = 'https://website.com/api/var'
r = requests.get(url=q)
strings = []
data = r.json()
i = 0
for item in data:
if item['existedPrior'] == 'false':
i += 1
strings.append(item['string'])
print(item['string'])
else:
break
print("New additions: ", i)
据我所知,json和python不共享布尔值的相同“定义”,这会带来麻烦。我在stackoverflow上的其他地方读到了如何处理这个问题,但它涉及到json.dumps和json.loads,以及各种我不能百分之百确定需要的混乱信息
另一方面,将json转换为python字典并从中进行搜索是否更好?考虑使用enumerate:
for index, value in enumerate(data):
if value["existedPrior"] == False:
string.append(data[index]['string'])
bool可以很好地转换为python数据类型
r.json()
已经在将json反序列化到python字典中。作为补充,您真的需要i
?它将与len(strings)
相同(除非你有一个bug,在这种情况下,它总是i
,而不是len(strings)
,这是错误的)。可能令人困惑的是,JSON的false
值的拼写与Python的false
文本的拼写不同。(同样地,对于true
/true
和null
/None
)这就是为什么不能将JSON文本作为Python文本进行eval
(或ast.literal\u eval
)的原因。但是JSON对其false
的含义没有任何定义(它只是定义为三个文本值中的一个,没有对其中任何一个进行解释),因此它的定义与Python的定义没有任何区别。此外,您可能听说JavaScript对false的定义与Python的定义不同。这一条是正确的(例如,在JavaScript中,NaN
是错误的),这与这里无关。谢谢@jordanm,我现在正在研究如何正确使用字典。