如果键值等于True,则打印所有JSON结果

时间:2020-10-12 15:13:21

标签: json python-3.x urllib

我知道这可能是一个简单的问题,但是我是一个菜鸟,我花了3天的时间寻找问题的答案,没有运气。

这是我要搜索的JSON结果的示例。我只想在键“ IsFree” = true时打印JSON结果。

[
{
"InventorySliceId": 20946771,
"InventoryDateId": 8050,
"StartTime": "2020-10-16T00:00:00",
"UnitId": 5096,
"UnitTypeId": 4303,
"IsPremium": false,
"IsFree": false,
"IsBlocked": false,
"IsReserved": true,
"IsWalkin": false,
"ReservationId": 2651378,
"FacilityId": 377,
"LockExpiration": "0001-01-01T00:00:00",
"IsLocked": false
 },

老实说,我已经尝试了50种不同的代码示例,每次遇到有关数据的错误时,都必须是int等。这是我放在一起的当前代码,它什么都不打印。

import json
import urllib.request

# download raw json object
url = 
"https://calirdr.usedirect.com/rdr/rdr/fd/availability
/getbyunit/5096/startdate/2020-10-16/nights/5/true? "

data = urllib.request.urlopen(url).read().decode()

# parse json object
obj = json.loads(data)

for i in obj:
if i['IsFree'] == 'false':
    print(json.dumps(obj, indent=1))

2 个答案:

答案 0 :(得分:0)

您可以尝试使用请求的内置json响应,将其转换为有效的python字典(或者在您的情况下为字典列表)

import requests
from pprint import pprint
resp = requests.get("https://calirdr.usedirect.com/rdr/rdr/fd/availability/getbyunit/5096/startdate/2020-10-16/nights/5/true?")
for res in resp.json():
    if res['IsFree'] is False:
        pprint(res)

结果:

[{'InventorySliceId': 20946771,
  'InventoryDateId': 8050,
  'StartTime': '2020-10-16T00:00:00',
  'UnitId': 5096,
  'UnitTypeId': 4303,
  'IsPremium': False,
  'IsFree': False,
  'IsBlocked': False,
  'IsReserved': True,
  'IsWalkin': False,
  'ReservationId': 2651378,
  'FacilityId': 377,
  'LockExpiration': '0001-01-01T00:00:00',
  'IsLocked': False},
 {'InventorySliceId': 20946968,
  'InventoryDateId': 8049,
  'StartTime': '2020-10-17T00:00:00',
  'UnitId': 5096,
  'UnitTypeId': 4303,
  'IsPremium': False,
  'IsFree': False,
  'IsBlocked': False,
  'IsReserved': True,
  'IsWalkin': False,
  'ReservationId': 2651378,
  'FacilityId': 377,
  'LockExpiration': '0001-01-01T00:00:00',
  'IsLocked': False},
 {'InventorySliceId': 20947072,
  'InventoryDateId': 8052,
  'StartTime': '2020-10-18T00:00:00',
  'UnitId': 5096,
  'UnitTypeId': 4303,
  'IsPremium': False,
  'IsFree': False,
  'IsBlocked': False,
  'IsReserved': True,
  'IsWalkin': False,
  'ReservationId': 2583386,
  'FacilityId': 377,
  'LockExpiration': '0001-01-01T00:00:00',
  'IsLocked': False},
 {'InventorySliceId': 20947253,
  'InventoryDateId': 8051,
  'StartTime': '2020-10-19T00:00:00',
  'UnitId': 5096,
  'UnitTypeId': 4303,
  'IsPremium': False,
  'IsFree': False,
  'IsBlocked': False,
  'IsReserved': True,
  'IsWalkin': False,
  'ReservationId': 2583386,
  'FacilityId': 377,
  'LockExpiration': '0001-01-01T00:00:00',
  'IsLocked': False},
 {'InventorySliceId': 20947341,
  'InventoryDateId': 8053,
  'StartTime': '2020-10-20T00:00:00',
  'UnitId': 5096,
  'UnitTypeId': 4303,
  'IsPremium': False,
  'IsFree': False,
  'IsBlocked': False,
  'IsReserved': True,
  'IsWalkin': False,
  'ReservationId': 2527842,
  'FacilityId': 377,
  'LockExpiration': '0001-01-01T00:00:00',
  'IsLocked': False}]

答案 1 :(得分:-1)

为此,您必须更改代码

obj = json.loads(data)

for i in obj: if i['IsFree'] == 'false': print(json.dumps(obj, indent=1))`

for i in obj: if i[0].IsFree == 'false':print(json.dumps(obj, indent=1))

应该可以正常工作

相关问题