ホームページ  >  記事  >  バックエンド開発  >  データベースデータをJSON形式に変換する例を詳しく解説

データベースデータをJSON形式に変換する例を詳しく解説

零下一度
零下一度オリジナル
2017-07-21 16:24:543826ブラウズ

最近自動運用保守プラットフォームを構築する予定なので、Django の知識を調べています。

実際のプロジェクト開発では、小さな問題に遭遇しました。フロントエンドとバックエンドの間の主流のデータ対話は JSON です。フロントエンドがサーバーにデータを転送するのは比較的簡単ですが、少し面倒なのは、サーバー側が JSON をフロントエンドに転送することです。

まず、Django はデフォルトで ORM テクノロジーを使用しますが、この種の抽象的な API には実はうんざりしています。これは、データベース テーブルを開発者向けのオブジェクトに抽象化するため、開発には便利であり、SQL ステートメントを記述する必要がありませんが、その後のプログラムでパフォーマンスのボトルネックの原因にもなります (トラブルシューティングを再度実行したときに、70 行の SQL に遭遇しました)ステートメント...) 運用保守担当者にとって、純粋な SQL は基本的な能力であり、ORM の構文を学習すると学習コストが増加します。

それはともかく、今回のテーマはデータベースから取得したデータをJSONに変換することです。以下ではORMとSQLの両方のメソッドを共有します。

1. Django モデルレイヤーと ORM テクノロジーを使用して JSON 形式に変換します

1 def getdata(request):2    # 使用ORM3    # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型4    data = models.VM.objects.values('id', 'ip', 'host', 'username')5    data = serializers.serialize("json", tomcats)6    return JsonResponse(list(data), safe=False)

2. Django モデルレイヤーを完全に放棄し、純粋な SQL を JSON 形式に変換します

1 def getdata(request):2 # 使用SQL3     with connection.cursor() as cursor:4         cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')5         data = dictfetchall(cursor)6     return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})

JsonResponse オブジェクト:

class <span class="highlighted">JsonResponse</span>(data) 、encoder=DjangoJSONEncoder、safe=True、json_dumps_params=None、**kwargs)

このクラスは、HttpRespon のサブクラスです。そのデフォルトの Content-Type は、アプリケーションに設定されます。 /json

2. 最初のパラメータである data は、辞書型である必要があります。安全なパラメータが False に設定されている場合、リスト、タプルなどの JSON 形式に変換できる任意のオブジェクトをデータに入力できます。 、 セット。 デフォルトの安全なパラメータは True です。渡したデータ型が辞書型ではない場合、TypeError 例外がスローされます。

3. json_dumps_params パラメーターは辞書であり、 json.dumps() メソッドを呼び出し、辞書内のパラメーターをメソッドに渡します。

上記の説明により、上記 2 つのメソッドの JsonResponse() で渡されるパラメーターは非常に明確です。

このように、データはJSON形式でフロントエンドに渡され、フロントエンドはAJAXを利用して取得し、加工したり表示したりすることができます。

以上がデータベースデータをJSON形式に変換する例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。