如何通过文本字段输入从 JSON 获取特定的信息列表?
这是我的示例 JSON 数据(通过 URL 检索)。实际上,有数百个项目。
{
"items": [
{
"timestamp": "2020-04-03T23:24:27+08:00",
"carpark_data": [
{
"carpark_info": [
{
"total_lots": "91",
"lot_type": "C",
"lots_available": "36"
}
],
"carpark_number": "HE12",
"update_datetime": "2020-04-03T23:23:34"
},
{
"carpark_info": [
{
"total_lots": "583",
"lot_type": "C",
"lots_available": "474"
}
],
"carpark_number": "HLM",
"update_datetime": "2020-04-03T23:23:23"
},
{
"carpark_info": [
{
"total_lots": "322",
"lot_type": "C",
"lots_available": "126"
}
],
"carpark_number": "RHM",
"update_datetime": "2020-04-03T23:23:35"
},
{
"carpark_info": [
{
"total_lots": "97",
"lot_type": "C",
"lots_available": "85"
}
],
"carpark_number": "BM29",
"update_datetime": "2020-04-03T23:23:43"
},
{
"carpark_info": [
{
"total_lots": "96",
"lot_type": "C",
"lots_available": "75"
}
],
"carpark_number": "Q81",
"update_datetime": "2020-04-03T23:23:21"
},
{
"carpark_info": [
{
"total_lots": "173",
"lot_type": "C",
"lots_available": "55"
}
],
"carpark_number": "C20",
"update_datetime": "2020-04-03T23:23:24"
}
]
}
]}
当用户在文本字段中键入相应的 carpark_number 时,我正在编写以下代码以获取 carpark_data,例如:HLM
我的预期输出是
[
{
"carpark_info": [
{
"total_lots": "583",
"lot_type": "C",
"lots_available": "474"
}
],
"carpark_number": "HLM",
"update_datetime": "2020-04-03T23:23:23"
}
]
我一直在尝试如下,但不确定是否可能..
from kivymd.uix.dialog import MDInputDialog
from urllib import parse
from kivy.network.urlrequest import UrlRequest
from kivy.app import App
import json
from jsonpath_ng import jsonpath,parse
class SearchMenu(MDInputDialog):
title = 'Search by Address'
text_button_ok = 'Search'
def __init__(self):
super().__init__()
self.size_hint = [.9, .3]
self.events_callback = self.callback
def callback(self,*args):
address = self.text_field.text
self.get()
print(address)
def get(self):
url= "https://api.data.gov.sg/v1/transport/carpark-availability"
UrlRequest(url,on_success=self.success, on_failure=self.failure, on_error=self.error)
def success(self,urlrequest, result):
print("ok")
data=[match.value for match in parse(('$..carpark_data[?(@.carpark_number =address)]')).find(result)]
json_data=json.dumps(data, indent =2 ,separators=(',', ':'))
print(json_data)
def failure(self,urlrequest, result):
print(result)
print("failure")
def error(self,urlrequest, result):
print(result)
print("error")