Как преобразовать строку jsonify в json в python?

#python #json #python-3.x #flutter #dart

Вопрос:

У меня есть строка jsonify следующим образом. Я создал эту строку с помощью дротика (Флаттера). Мой код дротика выглядит следующим образом.

  var stud_data = {"name": "John", "id": "2021MS", "total_marks": 493};
 String encoded_data = base64Url.encode(utf8.encode(stud_data.toString())); 
 

кодированные данные содержат «e25hbWU6IEpvaG4sIGlkOiAyMDIxTVMsIHRvdGFsX21hcmtzOiA0OTN9
»

Я должен преобразовать его в json на python.

Я попытался преобразовать следующий код в json с помощью python.

 from base64 import urlsafe_b64decode
import json
stud_data_64="e25hbWU6IEpvaG4sIGlkOiAyMDIxTVMsIHRvdGFsX21hcmtzOiA0OTN9"
stud_data=urlsafe_b64decode(string).decode('utf-8')
stud_data_json = json.loads(stud_data)
 

Это приводит к следующей ошибке.

 Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  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 353, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
 

Ошибка мне ясна, но я не знаю, как ее решить.

Комментарии:

1. '{name: John, id: 2021MS, total_marks: 493}' недопустимый JSON. Как вы «jsonify» его в первую очередь.

2. Я должен jsonify его с помощью дротика. В dart этот формат можно легко преобразовать в json.

3. Очевидно, что вы поступаете неправильно. Покажите свой код/спросите об этой части — вот где корень проблемы. Ваш текущий код разбор строки JSON будет работать, если это был действительный JSON.

4. Это базовая 64-преобразованная строка data="e25hbWU6IEpvaG4sIGlkOiAyMDIxTVMsIHRvdGFsX21hcmtzOiA0OTN9" .

5. Ваш код на стороне дротика плохой. импортируйте «dart:преобразование», затем выполните json.encode(stud_date) вместо toString()

Ответ №1:

Как все уже упоминали, у вас там нет допустимой строки json. Причина, по которой вы этого не делаете, заключается в том, что вы не преобразуете свой объект dart в json. Вы просто преобразуете его в строку. Измените свой код дротика на:

 String encoded_data = base64Url.encode(utf8.encode(jsonEncode(stud_data)));
 

Это даст вам действительную строку json, которая при преобразовании в base64 в конечном итоге будет:

 eyJuYW1lIjoiSm9obiIsImlkIjoiMjAyMU1TIiwidG90YWxfbWFya3MiOjQ5M30=