需要帮助阅读JSON对象

时间:2015-04-16 01:27:10

标签: python json

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}]

我不明白额外的斜线来自哪里。

另外,我如何单独打印例如邮政编码而不是打印出整个文本?

4 个答案:

答案 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