Я создаю клон Google Forms, который создаст форму, а затем сохранит ее на сервере. Конструктор форм выводит этот формат JSON.stringify:
{"method":"post","action":"/test","html":[{"input_type":"input_text","caption":"What is your name?"},{"input_type":"radio","caption":"What is the name of your dog?","options":{"benny":"Benny","billy":"Billy","bobby":"Bobby"}}]}
Я пытаюсь отправить это в мой бэкэнд App Engine следующим образом:
$.ajax({
type: "POST",
url: save_url,
contentType: "application/json; charset=utf-8",
dataType: "json",
data: json_string,
success: function (e) {
console.log(e);
}
});
Но как мне "открыть" эту строку json на моем сервере, чтобы я мог вставить ее в мою базу данных?
Первый вопрос: следует ли использовать self.request.body
для получения объекта данных (json string) или есть лучший способ его получить. Прямо сейчас я декодировал строку, чтобы получить правильный формат.
def post(self):
form_elements = json.loads(urllib.unquote_plus(self.request.body))
self.write(form_elements)
Второй вопрос: используя json.loads
для синтаксического анализа строки json, я получаю эту ошибку: ValueError: No JSON object could be decoded
Почему он не понимает, что это json?
Вот что я делаю, извлеченный из рабочего кода и разделенный на основные биты.
var blob = JSON.stringify(stuff);
$.ajax('/api/', {
'type': 'POST',
'async': false,
'data': {
'json': blob,
},
'dataType': 'json',
}).done(function(data) {
// ...
}
def post(self):
blob = self.request.get('json')
try:
stuff = json.loads(blob)
except:
# ...
Я не пробовал использовать все request.body
.