Python: JSONDecodeError: Ожидание имени свойства, заключенного в двойные кавычки - PullRequest
1 голос
/ 09 июля 2020

Нужна помощь экспертов в том, как отладить это и заставить двойные кавычки там, где они отсутствуют, чтобы я мог получить успешный ответ. Здесь выдается ошибка df = pd.io. json .json_normalize (rt. json (), record_path = 'предлагает'). Josn выглядит нормально, я поставил его в csv, поэтому не уверен, где проблема

мой код

import requests
import csv
import json
import pandas as pd
from pandas.io.json import json_normalize

url = "https://authentication.skiapi.com/access_token"

payload = {
    "client_id": "00c7fcf******",
    "client_secret": "7676cd5a********",
    "grant_type": "client_credentials"
}
headers = {"Content-Type": "application/json"}

response = requests.post(url, json=payload, headers=headers)
r = response.json() 
access_token = r.get('access_token') 
print(response.json()['access_token'])

   uri = "https://private-anon-73f9ac5d87-slinksmerchantapi.apiary-mock.com/v4/publisher/12633/offers?country=US"
headers = {'Authorization': access_token,'Content-Type': "application/json"}
rt = requests.get(uri, headers=headers)
      
df = pd.io.json.json_normalize(rt.json(), record_path='offers') ###problem is here 
#print(df)
df.to_csv(r"C:\\Users\ral\Downloads\\offers.csv", index=False)

Мой образец JSON

{
    "has_more": true
    "offers": [{
        "coupon_code": null
        "terms": null
        "description": "40% Off Comforters & Other Cool Bedding Stuff Online at BoxLunch! Stock up on select blankets and bedding online only for a limited time -- See site for details. Valid 3/3-3/5"
        "offer_starts": "2017-03-03 08:00:00"
        "title": "40% Off Comforters & Other Cool Bedding Stuff Online at BoxLunch!"
        "url": "http://www.boxlunch.com/home/bedroom/?soffer=152034"
        "merchant_details": {
            "domain": "boxlunchgifts.com"
            "verticals": []
            "country_code": null
            "id": 393756
            "metadata": {}
            "favourite": false
            "partner_type": null
            "merchant_id": 383288
            "advertiser_id": 123456
            "name": "BoxLunch"
            "countries": []
            "domains": [
                "boxlunchgifts.com"
                "boxlunch.com"
            ]
        }
        "offer_type": "sale"
        "id": 152034
        "offer_ends": "2017-03-05 08:00:00"
    }]
    "last_val": 152034
    "next_val": 152032
    "num_returned": 1
}

1 Ответ

1 голос
/ 09 июля 2020

JSON не подходит - согласно комментариям запятые отсутствуют, плюс true должно быть True и null должно быть None в python

Кроме того, вы используете устаревший интерфейс для json_normalize

, что возвращает json.dumps(rt.json(), indent=2)? Действительный json?

исправлено json

json = {
    "has_more": True,
    "offers": [{
        "coupon_code": None,
        "terms": None,
        "description": "40% Off Comforters & Other Cool Bedding Stuff Online at BoxLunch! Stock up on select blankets and bedding online only for a limited time -- See site for details. Valid 3/3-3/5",
        "offer_starts": "2017-03-03 08:00:00",
        "title": "40% Off Comforters & Other Cool Bedding Stuff Online at BoxLunch!",
        "url": "http://www.boxlunch.com/home/bedroom/?soffer=152034",
        "merchant_details": {
            "domain": "boxlunchgifts.com",
            "verticals": [],
            "country_code": None,
            "id": 393756,
            "metadata": {},
            "favourite": False,
            "partner_type": None,
            "merchant_id": 383288,
            "advertiser_id": 123456,
            "name": "BoxLunch",
            "countries": [],
            "domains": [
                "boxlunchgifts.com",
                "boxlunch.com"
            ]
        },
        "offer_type": "sale",
        "id": 152034,
        "offer_ends": "2017-03-05 08:00:00"
    }],
    "last_val": 152034,
    "next_val": 152032,
    "num_returned": 1
}
pd.json_normalize(json, record_path="offers")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...