【问题标题】:Can't fix JSONDecodeError: Invalid control character无法修复 JSONDecodeError:无效的控制字符
【发布时间】:2019-04-23 20:28:58
【问题描述】:

我有一个包含以下内容的 json 文件:

#create test.json and add content
dbutils.fs.put("test.json",'{"type": "abc","project_id": "abc","private_key_id": "123","private_key": "-----BEGIN PRIVATE KEY----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCJ05O/Ke3tGA96\n-----END PRIVATE KEY-----\n","client_email": "abc@gmail.com","client_id": "345","auth_uri": "https://accounts.abc.com/o/oauth2/auth","token_uri": "https://abc","auth_provider_x509_cert_url": "https://abc","client_x509_cert_url": "https://abcrobot/v1/metadata/x509"}'

#Read test.json
json.loads(test.json)

#Error
JSONDecodeError: Invalid control character 

我做错了什么?

【问题讨论】:

  • 您错误地使用了json.loads 方法。见herewith open('test.json','r') as json_file: json.loads(json_file)
  • 好像在-----END PRIVATE之后漏掉了一个",应该是'{"private_key": "--END PRIVATE" }'而不是'{"private_key": "--END PRIVATE}'
  • @P3qiUB 缺少 " 是由于我的复制和粘贴错误,但实际脚本有正确的引用。因此,您的建议不起作用。
  • 您的 JSON 无效;创建字典并使用json.dumps 生成它。
  • 问题在于 Python 将 \n 视为文字换行符,它不能出现在 JSON 中。

标签: python json pyspark


【解决方案1】:

不要手动生成 JSON;让json.dumps 为你做这件事。这将确保出现在私钥中的换行符被正确编码。

config = {
    "type": "abc",
    "id": "t1-2-3",
    "private_key_id": "123",
    "private_key": "-----BEGIN PRIVATE KEY----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwkO/V+WyyrmTFVFoDN9sN1+AL+KX/IB3y\nZqLJVPGCdQ1l+TlZXbFKFYMwo/Ca4N8g4sy7ZH/9UcqKTxawyqrh7dPcRWWI\nyvAWaEJVCtZhw+Hp4fkmWdoi\n-----END PRIVATE"
}

dbutils.fs.put("test.json", json.dumps(config))

with open("test.json") as f:
    config2 = json.load(f)

【讨论】:

    【解决方案2】:

    当这种情况发生时,找出问题所在的一种简单方法是使用 JSON 验证器,例如 this one

    在这种情况下,您缺少 " 和字符串的结尾,这是正确的方法:

    dbutils.fs.put("test.json",'{"type": "abc","id": "t1-2-3","private_key_id":"123","private_key": "-----BEGIN PRIVATE KEY----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwkO/V+WyyrmTFVFoDN9sN1+AL+KX/IB3y\nZqLJVPGCdQ1l+TlZXbFKFYMwo/Ca4N8g4sy7ZH/9UcqKTxawyqrh7dPcRWWI\nyvAWaEJVCtZhw+Hp4fkmWdoi\n-----END PRIVATE" }'
    

    【讨论】:

    • 我用过这个工具,谢谢。但是,即使修复了问题,同样的错误仍然存​​在。为什么/
    猜你喜欢
    • 2014-04-19
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2012-11-24
    • 2023-03-27
    • 2021-10-30
    相关资源
    最近更新 更多