python - 如何使用 Python 3 将 JSON 文件转换为字典

标签 python json list

第一篇文章在这里。 Python 和一般编程方面的完全新手。

基本上我正在关注这个人的 tutorial (不过,不查询相同的 API)关于从 Python 中的 JSON 响应中提取数据

这是我的(非常简单)代码:

#!/usr/bin/env python
import json
import requests

url = 'http://calendar.voyages-sncf.com/cdp/api/proposals/v3/outward/FRPAR/FRGNL/2017-11-01/12-HAPPY_CARD/2/fr/fr?fareCodes=HC16&onlyDirectTrains=true'

json_data = requests.get(url).json()
json_segments = json_data['segments'] 

print (json_segments)

现在,不再提取 JSON 文件中标有“Segments”的数据。我收到此错误:

json_segments = json_data['status']
TypeError: list indices must be integers or slices, not str

所以,我尝试过 int(),使其成为整数,但不起作用。

如果您能提供帮助,非常感谢。

最佳答案

requests.get().json()返回的数据是一个数据列表。您可以使用 for data in json_data: 循环来迭代列表。然后您可以直接访问字典的“segments”键。

#!/usr/bin/env python
import requests

url = 'http://calendar.voyages-sncf.com/cdp/api/proposals/v3/outward/FRPAR/FRGNL/2017-11-01/12-HAPPY_CARD/2/fr/fr?fareCodes=HC16&onlyDirectTrains=true'

json_data = requests.get(url).json()

for data in json_data:
    print(data['segments'])

关于您有关教程代码的问题:

import urllib.parse

import requests

address = 'lhr'
main_api = 'http://maps.googleapis.com/maps/api/geocode/json?'
url = main_api + urllib.parse.urlencode({'address': address})
json_data = requests.get(url).json()
json_status = json_data['status']
print(json_status)

google geocoding api here 的文档(他在视频中使用的 api)指定您将获得具有特定架构的字典。但是,当您从 http://calendar.voyages-sncf.com/cdp/api 获取数据时,它们不会返回相同的数据结构。在他们的例子中,它是一个字典列表。

因此,每次从不同的 api(或同一 api 中的不同端点)获取新数据时,您都会获取不同结构的数据。因此,您需要更改代码以处理每条数据。

JSON 只是一种标准方法,用于在通过网络发送后将字典、列表或其他 native (Python、Java 或您当时使用的任何语言的 native )与字符串进行更改。这可能会导致问题。特别是在 python 中,set() 不能直接更改为 JSON。它需要更改为列表,然后更改为 JSON,然后返回到列表,然后返回到另一侧的集合。

以下示例是从 Google 文档 here 复制的经过一些小的修改,使其更小、更易读。

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "1600",
               "short_name" : "1600",
               "types" : [ "street_number" ]
            },
         ],
         "formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
         "geometry" : {
            "location" : {
               "lat" : 37.4224764,
               "lng" : -122.0842499
            },
            "location_type" : "ROOFTOP",
            "viewport" : {
               "northeast" : {
                  "lat" : 37.4238253802915,
                  "lng" : -122.0829009197085
               },
               "southwest" : {
                  "lat" : 37.4211274197085,
                  "lng" : -122.0855988802915
               }
            }
         },
         "place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
         "types" : [ "street_address" ]
      }
   ],
   "status" : "OK"
}

关于python - 如何使用 Python 3 将 JSON 文件转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46895204/

相关文章:

python - 如何使用每行中的特定列从矩阵创建向量,而无需在 Python 中循环?

python - SPYDER 中的 PyQT 退出错误

jquery - 如何在jquery数据表的每一行添加删除按钮

java - 在 java.util.List 中的任意位置插入

python - 如何使用 pandas 从本地网络读取 csv 文件

python - 在 pythonbrew 中使用 virtualenv |安装依赖项

java - FlexJSON 没有完全序列化类对象

javascript - 如何从 JSON 数组中删除元素

c++ - 如何访问 std::list<string> 中的某个元素

c# - Find() 与列表上的枚举