【问题标题】:Need Help Reading JSON objects需要帮助阅读 JSON 对象
【发布时间】:2015-04-16 01:27:10
【问题描述】:
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}]

我不明白多余的斜线是从哪里来的。

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

【问题讨论】:

    标签: python json


    【解决方案1】:

    多余的斜线被“转义”。

    例如,你声明一个字符串:

    "le_string" -> le_string

    但是如果你想在那个字符串中表示一个 ":

    "le_\"string\"" -> le_"string"

    当你表示 JSON 对象时,你必须用 "" 声明键,所以

    "{\"key\": \"value\" }" -> { "key": "value" }

    希望对你有帮助。

    【讨论】:

    • 可以说,不是打印出整个文本,我只想要它的一部分,比如邮政编码。当我尝试打印出来时,是否必须包含转义键?
    • @Ria 不,如果您将该字符串解析为 JSON 对象,则在访问对象值时无需关心转义字符
    【解决方案2】:

    由于 java 中的字符串写在双引号内,我们使用转义序列 \ 来告诉字符串在双引号之前有转义序列时忽略其中的双引号。

    例如,您有一个没有任何引号的常规字符串,在 Java 中您可以这样初始化它

    String s = "I spend most of my time in Stackoverflow";
    

    如果存在带双引号的字符串,则必须使用转义序列 \

    String t = "\"I spend most of my time in Stackoverflow\" said the developer";
    

    【讨论】:

      【解决方案3】:
      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中的代码

      【讨论】:

      • 使用负载,它将斜杠替换为 u [{u'UV_INDEX': 8, u'UV_ALERT': 0, u'ZIP_CODE': 92507}]
      • @Ria 我认为您可以打印数据。您不需要任何这些 json.dumps / json.loads。按照这个更新我的答案。
      【解决方案4】:

      你的问题在这里:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-26
        • 2011-06-15
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        相关资源
        最近更新 更多