【问题标题】:map JSON to CSV将 JSON 映射到 CSV
【发布时间】:2020-06-27 13:10:19
【问题描述】:

我尝试从站点 XHR 请求数据,然后将其保存为 CSV。响应是 JSON,响应的一部分是嵌套的。 我有两个问题:

  • 首先:它不会迭代。它只返回第一个对象的数据,但在两行中。除了第一行有 floorPlan:AltText 和第二行有 floorPlan:url 的最后一列之外,两行上的数据相同
  • 第二:我不喜欢我的某些字符“'charmap'编解码器无法在位置 147:...编码字符'\u2560'。”。似乎是一些 UTF-8 问题

响应的格式是(为了便于阅读,这里缩短了):

[{
"id":"67d3686f-848b-e911-a971",
"name":"1302",
"url":"/site/",
"residenceType":"3",
"objectStatus":"1",
"price":570000.0,
"fee":245.0,
"apartmentNumber":"1302",
"address":"Major street 8",
"rooms":4.0,
"floor":3.0,
"primaryArea":92.0,
"inhabitDate":"2022-02-28T23:00:00Z",
"floorPlan":{"url":"/externalfiles/image/1.jpg","altText":"Drawing"}},
{"id":"69d3686f-848b-e911-a971-000d3ab795ed",
"name":"1303",
"url":"/site2/",
"residenceType":"3",
"objectStatus":"1",
"price":320000.0,
"fee":113.0,
"apartmentNumber":"1303",
"address":"Major Street 8",
"rooms":2.0,
"floor":3.0,
"primaryArea":47.0,
"inhabitDate":"2022-02-28T23:00:00Z",
"floorPlan":{"url":"/externalfiles/image/2.jpg","altText":"Drawing"}},

我的代码是:

import requests
import pandas as pd
import csv
import json

h = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
     'X-Requested-With': 'XMLHttpRequest',
}

u = "https://cdn-search-standard-prod.azureedge.net/api/v1/search/getstageobjects/23d8dbc1-005a-e911-a961-000d3aba65fd"

x = requests.get(u,headers=h).json()

f = csv.writer(open("test.csv", "w+"))

f.writerow(["id", "name", "residenceType", "objectStatus", "price", "fee", "apartmentNumber"])

for x in x:
    f.writerow([x["id"],
                x["name"],
                x["residenceType"],
                x["objectStatus"],
                x["price"],
                x["fee"],
                x["apartmentNumber"],
                x["floorPlan"]["url"]])
    df=pd.DataFrame(x)
    df.to_csv(r'C:\Users\abc\Documents\Python Scripts\file_20200627.csv', index=False, sep=';',encoding='utf-8')

【问题讨论】:

    标签: python json xmlhttprequest export-to-csv


    【解决方案1】:

    如果您想将 x 转换为 csv,请使用 pandas,您正在尝试将 x 转换为 csv,但 x 不是 csv 写入器对象,而且您正在同时写入行

    import requests
    import pandas as pd
    import csv
    import json
    
    h = {
         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
         'X-Requested-With': 'XMLHttpRequest',
    }
    
    u = "https://cdn-search-standard-prod.azureedge.net/api/v1/search/getstageobjects/23d8dbc1-005a-e911-a961-000d3aba65fd"
    
    x = requests.get(u,headers=h).json()
    
    f = csv.writer(open("test.csv", "w+"))
    
    f.writerow(["id", "name", "residenceType", "objectStatus", "price", "fee", "apartmentNumber"])
    print(x)
    for x in x:
        f.writerow([x["id"],
                    x["name"],
                    x["residenceType"],
                    x["objectStatus"],
                    x["price"],
                    x["fee"],
                    x["apartmentNumber"],
                    x["floorPlan"]["url"]])
    df=pd.DataFrame(x)
    df.to_csv(r'C:\Users\abc\Documents\file.csv', index=False, sep=';',encoding='utf-8')
    

    输出

    id  name    url     residenceType   objectStatus    price   fee     secondaryArea   apartmentNumber     address     rooms   floor   maxFloor    concept     primaryArea     plotArea    inhabitDate     inhabitDateEnd  inhabitDateTimeStamp    inhabitDateDetermined   swanLabel   parkingSpaceStatus  floorPlan
    altText     75d3686f-848b-e911-a971-000d3ab795ed    1504    /stockholm-lan/jarfalla-kommun/bolinder-strand...   3   1   3840000.0   1974.0  0.0     1504    Fabriksvägen 8  3.0     5.0     15.0    782ffe43-f9ef-40eb-8d92-cfd90aa6b147    73.0    0.0     2022-02-28T23:00:00Z    2022-04-30T22:00:00Z    1646089200000   False   True    1   Planritning
    url     75d3686f-848b-e911-a971-000d3ab795ed    1504    /stockholm-lan/jarfalla-kommun/bolinder-strand...   3   1   3840000.0   1974.0  0.0     1504    Fabriksvägen 8  3.0     5.0     15.0    782ffe43-f9ef-40eb-8d92-cfd90aa6b147    73.0    0.0     2022-02-28T23:00:00Z    2022-04-30T22:00:00Z    1646089200000   False   True    1   /externalfiles/image/23d8dbc1-005a-e911-a961-0...
    

    输出 csv 文件

    【讨论】:

    • 嗨!感谢您的帮助,但不幸的是它不起作用。它不喜欢 dataframe 的语法 df=pd.DataFrame(x) SyntaxError: invalid syntax
    • @NewDev 不,我检查它是否正常工作,因为 x 是列表。我们可以轻松放置列表来创建数据框
    • 对不起,不明白你的意思。我应该怎么做才能将其写入 CSV?
    • 对!我错过了一个“,”。但现在它说“'charmap'编解码器无法在位置 147 编码字符 '\u2560':字符映射到 ”,我认为这与它不喜欢瑞典字母“å”、“ä ","ö"。
    • @NewDev 上面的代码是我在我的电脑上执行的。请分享你正在尝试的代码
    猜你喜欢
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2019-05-27
    • 2016-10-15
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多