Не удается исправить ошибку JSONDecodeError: недопустимый управляющий символ

#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. Я использовал этот инструмент, спасибо за это. Однако даже при устранении проблем остается та же ошибка. Почему/