【问题标题】:Extracting and replacing json data提取和替换json数据
【发布时间】:2018-12-27 15:45:36
【问题描述】:

我想替换和格式化内容在 json 文件中列出的方式。 我返回的当前结构如下:

{"success": "OK", "message": "DEPARTURES_FOUND", "data": 
   {"departures": 
      [{"id": 58445, "itinerary_id": 1151, "codcorsa": "CASO1812271635NG", "ship_description": "Fast Ferry", "delay": null, "is_suspended": null, "notes": null, "type_id": 2, "departurePort": "CAPRI", "arrivalPort": "SORRENTO", "departureDate": "2018-12-27 16:35", "arrivalDate": "2018-12-27 16:55"},
      {"id": 58425, "itinerary_id": 1045, "codcorsa": "PRIC1812271620NS", "ship_description": "Fast Ferry", "delay": null, "is_suspended": null, "notes": null, "type_id": 2, "departurePort": "PROCIDA", "arrivalPort": "ISCHIA CASAMICCIOLA", "departureDate": "2018-12-27 17:05", "arrivalDate": "2018-12-27 17:15"}

我想使用 python 删除第一行并以以下结构显示时间表。 "IS_SUSPENDED": null 替换为 "STATUS": "active"

[{"DEPARTURE DATE": "2018-12-27 16:35", ARRIVAL DATE": "2018-12-27 16:55","DEPARTURE PORT": "Capri", "ARRIVAL PORT": "Sorrento", "STATUS": "active"}

【问题讨论】:

  • 你从哪里得到那个json?你想如何处理这些数据?显示您的代码

标签: python json web-scraping


【解决方案1】:

Python 原生支持 JSON,只需将 import json 添加到代码顶部并使用 json.loads() 即可读取数据。

这是一个例子:

with open("data_file.json", "r") as read_file:
    data = json.load(read_file)

或者这里是一些代码看起来像你描述的那样修改传入数据。注意 json_string 会改为加载的文件或 API 响应

#!python3

import json

def cleanText( text ):
    return text.lower().capitalize()

json_string = '''
{
    "success": "OK", 
    "message": "DEPARTURES_FOUND", 
    "data": {
        "departures": [
            {
                "id": 58445, 
                "itinerary_id": 1151,
                "codcorsa": "CASO1812271635NG", 
                "ship_description": "Fast Ferry", 
                "delay": null, 
                "is_suspended": null, 
                "notes": null, 
                "type_id": 2, 
                "departurePort": "CAPRI",
                "arrivalPort": "SORRENTO",
                "departureDate": "2018-12-27 16:35",
                "arrivalDate": "2018-12-27 16:55"
            },
            {
                "id": 58425, 
                "itinerary_id": 1045,
                "codcorsa": "PRIC1812271620NS",
                "ship_description": "Fast Ferry",
                "delay": null,
                "is_suspended": null,
                "notes": null,
                "type_id": 2,
                "departurePort": "PROCIDA",
                "arrivalPort": "ISCHIA CASAMICCIOLA",
                "departureDate": "2018-12-27 17:05",
                "arrivalDate": "2018-12-27 17:15"
            }
        ]
    }
}
'''

data = json.loads( json_string )
cleanData = []

for departure in data['data']['departures']:
    cleanData.append({
        "DEPARTURE DATE": departure['departureDate'], 
        "ARRIVAL DATE": departure['arrivalDate'],
        "DEPARTURE PORT": cleanText( departure['departurePort'] ),
        "ARRIVAL PORT": cleanText( departure['arrivalPort'] ),
        "STATUS": "suspended" if departure['is_suspended'] else "active"
    })

print( json.dumps( cleanData ) )

json 库文档:https://docs.python.org/3.7/library/json.html

【讨论】:

    【解决方案2】:

    试试看

    import json
    
    json_data = """{
    "success": "OK", 
    "message": "DEPARTURES_FOUND", 
    "data": {
        "departures": 
            [
                {
                "id": 58445, 
                "itinerary_id": 1151, 
                "codcorsa": "CASO1812271635NG", 
                "ship_description": "Fast Ferry",
                "delay": null, 
                "is_suspended": null, 
                "notes": null, 
                "type_id": 2, 
                "departurePort": "CAPRI",
                "arrivalPort": "SORRENTO", 
                "departureDate": "2018-12-27 16:35", 
                "arrivalDate": "2018-12-27 16:55"
                },
                {
                "id": 58425, 
                "itinerary_id": 1045, 
                "codcorsa": "PRIC1812271620NS", 
                "ship_description": "Fast Ferry",
                "delay": null, 
                "is_suspended": null, 
                "notes": null, 
                "type_id": 2, 
                "departurePort": "PROCIDA",
                "arrivalPort": "ISCHIA CASAMICCIOLA", 
                "departureDate": "2018-12-27 17:05", 
                "arrivalDate": "2018-12-27 17:15"
                }
            ]
        }
    }"""
    
    my_dict = json.loads(json_data)
    result = []
    for d in my_dict['data']['departures']:
        result.append(
            {
                "DEPARTURE DATE": d['departureDate'],
                "ARRIVAL DATE": d['arrivalDate'],
                "DEPARTURE PORT": d['departurePort'],
                "ARRIVAL PORT": d['arrivalPort'],
                "STATUS": "active" if not d['is_suspended'] else "inactive"
            }
        )
    
    print(json.dumps(result))
    

    【讨论】:

      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 2016-06-12
      • 2019-07-05
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多