【问题标题】:Parsing variables inside json - python [duplicate]解析json中的变量-python [重复]
【发布时间】:2021-11-06 14:20:10
【问题描述】:

我正在尝试在将变量加载到 json 并触发发布请求之前在字符串格式中包含变量。

import json

def addRecord(TransactionID, Date, Status, Reference):
    data =  """
        {
            "fields":{
                "TransactionID": TransactionID,
                "Date": Date,
                "Status": Status,
                "Reference": Reference
            }
        }"""
    data = json.loads(data)

右侧是传递给函数的变量

我收到一个错误,我没有在 json 中发送任何值

(env) myusername@mylaptop:/mnt/c/Users/myuser/projects/scripts/myproject$ python3 main.py
        {
            "fields":{
                "TransactionID": TransactionID,
                "Date": Date,
                "Status": Status,
                "Reference": Reference
            }
        }
Traceback (most recent call last):
  File "/mnt/c/Users/yalat/projects/scripts/apiCall/main.py", line 33, in <module>
    print(addRecord(5123, 20211009, "added", 12))
  File "/mnt/c/Users/yalat/projects/scripts/apiCall/main.py", line 29, in addRecord
    data = json.loads(data)
  File "/usr/lib/python3.9/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.9/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 4 column 34 (char 67)

【问题讨论】:

  • 您的意思是使用f-string 来格式化字符串吗?正如所写,字符串包括变量的文字名称,而不是内容。
  • 查看交易 ID、状态、日期和参考。我无法将它作为变量传递。它作为字符串传递

标签: python json python-3.x api parsing


【解决方案1】:

使用f-string。它提供了一种在字符串文字中嵌入表达式的方法

data =  f"""
        {
            "fields":{
                "TransactionID": {TransactionID},
                "Date": {Date},
                "Status": {Status},
                "Reference": {Reference}
            }
        }"""
data = json.loads(data)

【讨论】:

  • 我不确定是否可以将字典解析为 json.load(data) 要求它是字符串。看下面的错误TypeError: the JSON object must be str, bytes or byte array, not dict至于f-string。它没有用。我得到的错误是字符串太嵌套而无法加载SyntaxError: f-string: expressions nested too deeply
  • 这里是我尝试访问的 API(POST 请求)curl -v -X POST https://api.airtable.com/v0/tableID/table\ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ --data '{ "fields": { "TransactionID": 15228, "Date": 20141018, "Status": "Transferred", "Reference": 55289 } }'
  • 嵌套错误意味着你可能在一个 f 字符串中有一个 f 字符串
  • 检查你的代码
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
相关资源
最近更新 更多