import urllib
import json
url = "http://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/{ZIP Code}/JSON"
url = url.replace("{ZIP Code}", "92507")
print url
jsonurl = urllib.urlopen(url)
data = (jsonurl.read())
text = json.dumps(data)
print text
打印返回:
"[{\"ZIP_CODE\":92507,\"UV_INDEX\":8,\"UV
_ ALERT \ “:0}]”
这不是JSON对象,也不是我在url中看到的。
网址返回[{"ZIP_CODE":92507,"UV_INDEX":8,"UV_ALERT":0}]
我不明白额外的斜线来自哪里。
另外,我如何单独打印例如邮政编码而不是打印出整个文本?
答案 0 :(得分:0)
额外的斜杠被“转义。
例如,您声明一个字符串:
"le_string" -> le_string
但是如果你想代表一个“在那个字符串里面:
"le_\"string\"" -> le_"string"
当您表示JSON对象时,必须使用“”声明键,所以
"{\"key\": \"value\" }" -> { "key": "value" }
希望它有所帮助。
答案 1 :(得分:0)
由于java中的字符串是用双引号编写的,我们使用转义序列\来告诉String在双引号之前有转义序列时忽略其中的双引号。
例如,你有一个没有任何引号的常规字符串,在Java中你可以像这样初始化它
String s = "I spend most of my time in Stackoverflow";
如果存在带双引号的String,则必须使用转义序列\
String t = "\"I spend most of my time in Stackoverflow\" said the developer";
答案 2 :(得分:0)
import urllib
import json
url = "http://iaspub.epa.gov/enviro/efservice/getEnvirofactsUVDAILY/ZIP/{ZIP Code}/JSON"
url = url.replace("{ZIP Code}", "92507")
print url
jsonurl = urllib.urlopen(url)
data = (jsonurl.read())
## Below to show data without escape characters
print data
## To print `ZIP_CODE` from the json
print [e['ZIP_CODE'] for e in json.loads(data)]
我认为你不需要任何这些json.loads()/ json.dumps()属性。基本上这些属性分别类似于encode / stringify。
json.loads()编码基本python对象
json.dumps()JSON对象解码
不要错过在runnable
中测试代码答案 3 :(得分:0)
你的问题在于:
text = json.dumps(data)
您告诉JSON库将data
编码为JSON。由于数据已经是JSON字符串,这将导致JSON库转义字符串中的所有引号。你现在有一个包含JSON JSON字符串的字符串 - 这不是你想要的=)
你想这样做:
array = json.loads(data)
这将为您提供一个字典列表,这些字典对应于您通过HTTP调用获得的JSON对象的JSON数组。
要访问和打印您执行的邮政编码:
# Get the first dictionary/JSON object
object = array[0]
# Get the ZIP_CODE property from the dictionary/JSON object
zip_code = object["ZIP_CODE"]
print(zip_code)
92507