【问题标题】:JSON to Python ListJSON 到 Python 列表
【发布时间】:2021-04-02 23:46:44
【问题描述】:

上下文:使用 Visual Studio Code,尝试将我的 JSON 响应转换为 Python 列表,以便将其添加到 Google Sheet。

我想将我的响应转换为 JSON 列表列表(如下面的“工作示例”)

工作示例

RandomJson = [
    ['hello',2],
    ["hi",3]
]

bla = sheet.values().update(spreadsheetId=SAMPLE_SPREADSHEET_ID, range='sheet1!A1', valueInputOption="USER_ENTERED", body={"values":RandomJson}).execute()

我尝试了多种方法,但无法将“我的数据集”转换为“所需格式”

有人可以帮忙吗?

我的数据集

{
  "data": {
    "tokens": [
      {
        "name": "FMX Token",
        "symbol": "FMXT"
      },
      {
        "name": "HeavensGate",
        "symbol": "HATE"
      },
      {
        "name": "Shrimp Swap",
        "symbol": "Shrimp"
      }
    ]
  }
}

所需格式

RandomJson = [
    ["FMX Token","FMXT"],
    ["HeavensGate","HATE"],
    ["Shrimp Swap","Shrimp"]
]

编辑 - 完整代码

我已在 cmets 中提出更改建议,还添加了“j = json.loads(JsonData)”

我现在收到一个错误:

"googleapiclient.errors.HttpError: https://sheets.googleapis.com/v4/spreadsheets//values/sheet1%21A1?valueInputOption=USER_ENTERED&alt=json returned "收到无效的 JSON 有效负载。 'data.values' 中的未知名称“FMX 令牌”:找不到字段。”

import requests
import gspread
import json
import os.path
import pprint
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2 import service_account

SERVICE_ACCOUNT_FILE = 'CredEDs.json'
SCOPES = ["https://spreadsheets.google.com/feeds","https://www.googleapis.com/auth/spreadsheets","https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

creds = None
creds = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

SAMPLE_SPREADSHEET_ID = ''

service = build('sheets','v4',credentials=creds)

sheet = service.spreadsheets()

headers = {
    'authority': 'api.thegraph.com',
    'accept': '*/*',
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
    'content-type': 'application/json',
    'origin': 'https://info.uniswap.org',
    'sec-fetch-site': 'cross-site',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': 'https://info.uniswap.org',
    'accept-language': 'en-GB,en;q=0.9,es-419;q=0.8,es;q=0.7,en-US;q=0.6',
}

data = rb'{"operationName":"tokens","variables":{"skip":500},"query":"query tokens($skip: Int\u0021) {\n tokens(first: 500, skip: $skip) {\n name\n symbol\n}\n}\n"}'
response = requests.post('https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2', headers=headers, data=data)

JsonData = response.text

j = json.loads(JsonData)

result = {token['name']: token['symbol'] for token in j['data']['tokens']}

bla = sheet.values().update(spreadsheetId=SAMPLE_SPREADSHEET_ID, range='sheet1!A1', valueInputOption="USER_ENTERED", body={"values":result}).execute()

【问题讨论】:

    标签: python arrays json list


    【解决方案1】:

    很简单:

    result = [[token['name'], token['symbol']] for token in data['data']['tokens']]
    

    【讨论】:

    • 感谢您的回复!不幸的是,我得到了:“TypeError:字节索引必须是整数或切片,而不是 str” 这是一个更大的代码示例,仅用于上下文 ``` data = rb'{"operationName":"tokens","variables":{ "skip":500},"query":"query tokens($skip: Int\u0021) {\n tokens(first: 500, skip: $skip) {\n name\n symbol\n}\n}\ n"}' response = requests.post('api.thegraph.com/subgraphs/name/uniswap/uniswap-v2', headers=headers, data=data) JsonData = response.text result = {token['name']: token['symbol'] for token in data[ 'data']['tokens']} 打印(结果)```
    • 不幸的是,您的示例可能与您描述的不完全一样...请包含更多代码和问题?您提供的示例是字符串还是通过 json 模块转换的?
    • 首先,如果是另一个问题,感谢@go2nivana 的帮助。 adirabargil 我在“编辑”部分添加了更多代码和另一个错误
    • 响应好像是String格式,所以需要把字符串转成JSON。导入 json JSONTypeData = json.loads(JsonData)
    • 嗨@AnkitSahay,感谢您的建议,我补充说(请参阅原始帖子中的已编辑部分)并且我遇到了一个奇怪的错误,但我认为这离胜利更近了一步!
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2018-05-12
    • 2014-11-19
    • 2019-01-13
    • 2013-02-23
    • 2018-07-19
    • 2023-03-09
    • 2017-07-29
    相关资源
    最近更新 更多