辞書とリストの 40kb の辞書を json にエンコードし、それを http 経由で nosql データベースにプッシュしています。辞書のコンテンツをエンコードするために jsonpickle.encode と json.dumps の両方のモジュールを使用しましたが、どちらも http エラーにつながります。コードの問題のあるセクションを手動で CURL してみましたが、「-bash: 予期しないトークン `(' の近くで構文エラーが発生しました」
コード例を次に示します。
import urllib2 , jsonpickle
url = "http://amazonaws.com/server/%s/_create" % item
data = jsonpickle.encode( some_dict_of_dicts_and_lists ) # also tried json.dumps here.
try:
req = urllib2.Request ( url , data , { 'Content-Type' : 'application/json' } )
f = urllib2.urlopen ( req )
except Exception as e:
print "Error: %s" %e
上記は、辞書の特定のセクションを nosql db に入力するために機能します。ただし、辞書の他のセクションを送信すると、「エラー: HTTP エラー 400: 不正な要求」が出力されます。これは、何かがデータ変数/文字列で適切にエンコードされていないことを意味します。この問題に対する CURL の応答を得るために、次のコードを CURL してみました。
item_id = item_dictionary [ 'id' ]
data = jsonpickle.encode( some_dict_of_dicts_and_lists ) # also tried json.dumps here.
command = 'curl -XPOST "http://amazonaws.com/server/%s/_create" -d '"%s"' % ( nsn_id , data )
os.system(command)
これにより、「sh: -c: 行 0: 予期しないトークン `(' の近くで構文エラーが発生しました」というエラーが生成されます。
コマンド ラインに手動で curl コマンドを入力しようとすると、次の一連のエラーが表示されます。
curl: (6) Could not resolve host: material; nodename も servname も指定されていないか、不明な
curl: (6) ホスト: アイテムを解決できませんでした。nodename も servname も指定されていないか、
curl: (6) ホストを解決できませんでした: of; nodename も servname も指定されていないか、または不明
です curl: (3) [globbing] 位置 146 で一致しない閉じ括弧/括弧
{"エラー":"MapperParsingException[解析に失敗しました]; ネストされています: JsonParseException[VALUE_STRING の予期しない入力の終わり\ n at [ソース: [B@2ff246ab; 行: 1, 列: 6519]]; ","ステータス":400}
だから:
1)jsonエンコードプロセスキャプチャがすべての括弧を作成し、一重引用符がそれらの前に「\」でフォーマットされていることを確認するより良い方法はありますか? それらすべてを交換する必要がありますか?
2) urllib2 を使用してこのエラーの原因をより詳細に把握する良い方法はありますか、または bash タイプのエラーを取得するためにコマンド ラインから CURL を実行する必要がありますか?