#python #json #pyspark
#python #json #pyspark
Вопрос:
У меня есть файл 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/Ke3tGA96n-----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
Что я делаю не так?
Комментарии:
1.Вы используете
json.loads
метод неправильно. Смотрите здесьwith open('test.json','r') as json_file: json.loads(json_file)
2. Кажется, что вы пропускаете
"
после-----END PRIVATE
, это должно быть'{"private_key": "--END PRIVATE" }'
, а не'{"private_key": "--END PRIVATE}'
3. @P3qiUB пропажа » произошла из-за моей ошибки копирования и вставки, но в самом сценарии есть правильная цитата. Таким образом, ваш совет не сработал.
4. Ваш JSON недопустим; создайте словарь и используйте
json.dumps
для его генерации.5. Проблема в том, что Python обрабатывает
n
как буквальный перевод строки, который не может отображаться в JSON.
Ответ №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/IB3ynZqLJVPGCdQ1l TlZXbFKFYMwo/Ca4N8g4sy7ZH/9UcqKTxawyqrh7dPcRWWInyvAWaEJVCtZhw Hp4fkmWdoin-----END PRIVATE"
}
dbutils.fs.put("test.json", json.dumps(config))
with open("test.json") as f:
config2 = json.load(f)
Ответ №2:
Когда это происходит, простой способ выяснить, что не так, — использовать средство проверки JSON, подобное, например, этому.
в этом случае вам не хватает "
и конца вашей строки, это правильный способ:
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/IB3ynZqLJVPGCdQ1l TlZXbFKFYMwo/Ca4N8g4sy7ZH/9UcqKTxawyqrh7dPcRWWInyvAWaEJVCtZhw Hp4fkmWdoin-----END PRIVATE" }'
Комментарии:
1. Я использовал этот инструмент, спасибо за это. Однако даже при устранении проблем остается та же ошибка. Почему/