会有所帮助。 在这里我试图通过Pincode作为输入创建一个显示城市州和国家名称的代码,提前谢谢
import urllib, json
from urllib.request import urlopen
from tkinter import *
global pincode
root=Tk()
frame=Frame(root,width=250,height=250)
frame.grid()
class cal:
def __init__(self):
self.string=StringVar()
entry=Entry(frame,textvariable=self.string)
entry.grid(row=1,column=2,columnspan=6)
but=Button(root,text="submit",command=self.pin)
but.grid()
def pin(self):
pincode=self.string.get()
url = "https://www.whizapi.com/api/v2/util/ui/in/indian-city-by-postal-code?pin="+pincode+"&project-app-key=fnb1agfepp41y49jz6a39upx"
response = urllib.request.urlopen(url)
data = json.loads(response.read().decode('utf8'))
fi=open("neme.txt","w")
fi.write(str(data))
state=data['State']
city=data['City']
area=data['area']
name=Label(frame,text="State:"+state+"City:"+city+"area:"+area)
name.grid(row=3,column=0)
cal()
mainloop()
错误
Traceback (most recent call last):
File "/usr/lib/python3.4/tkinter/__init__.py", line 1541, in __call__
return self.func(*args)
File "/home/yuvi/Documents/LiClipse Workspace/GUI/src/Pn_code.py", line 24, in pin
state=data['State']
KeyError: 'State'
答案 0 :(得分:1)
确定。错误告诉您,您没有名为" State"你在var match = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|?(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])?[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.exec(cardno);
变量下的词典。所以也许也没有让json陷入困境。
如果您回复:
data
然后你就得不到" State"使用:
{"ResponseCode":0,"ResponseMessage":"OK","ResponseDateTime":"9/3/2016 2:41:25 PM GMT","Data":[{"Pincode":"560103","Address":"nagar","City":"Banalore","State":"nataka","Country":"India"}]}
你必须使用:
data["State"]
其余的:
data["Data"][0]["State"]
为什么这样?因为你必须得到嵌套键,第一个键是data["Data"][0]["City"]
data["Data"][0]["Country"]
,使用"Data"
你收到一个列表,并且因为它是一个元素列表,你必须获得列表的第一项:{ {1}}。在data["Data"]
下的最后,你可以找到关键字,你可以找到州,城市,国家。