2

WebOb を使用する webapp2 を使用する Google App Engine プラットフォームで Web アプリを構築しています。POST入れ子になった配列や辞書を含む、JSON 形式のデータが必要です。例えば:

$.post('/addvendor', {'vendor': {'name': 'test', 'description': 'a good company', 'tags':['foo', 'bar']}}, function(data){console.log(data)}, 'application/json')

ただし、サーバー側では、データは、私が編集した元のネストされた JSON オブジェクトのようなものではなく、フラットな「MultiDict」オブジェクトとして取得されますPOST。例えば:

>>> print self.request.params.items()
[(u'vendor[name]', u'test'), (u'vendor[description]', u'a good company'), (u'vendor[tags][]', u'foo'), (u'vendor[tags][]', u'bar')]

このオブジェクトは解析が非常に困難です。私のサーバーコードでは、データを簡単に操作して調べることができるように、サーバー上で同じデータを標準の JSON 形式、または少なくともネストされた辞書と配列を使用して同等の Python 形式で取得する方法はありますか?

4

2 に答える 2

2

(jayhendren の助けを借りて更新) $.ajax を使用し、手動で contentType='application/json; を設定する必要があります。$.post はデフォルトの "application/x-www-form-urlencoded;" を使用するため、代わりに charset=utf-8' を使用します。コンテンツ タイプ。また、JSON.stringify を使用して手動でデータを JSON 文字列にエンコードする必要があります。

$.ajax({url:'/addvendor', 
        type: 'post', 
        data:JSON.stringify({'vendor': {'name': 'test', 'description': 'a good company', 'tags':['foo', 'bar']}}), 
        contentType:'application/json; charset=utf-8',
        dataType: "json",
        success:function(data){console.log(data)}})

...

print json.loads(self.request.body)
于 2013-10-06T07:22:43.650 に答える