PostgreSQL では、通常、特殊なデータ型の各ノードを辞書 / JSON 型で保存します。プログラム内で完全なデータ情報を取得する必要がある場合、このノードを自己展開する必要があります。
以下では、グローバル ID 方式を使用して展開します。これは、SQL と NoSQL を組み合わせたシステムに一般的に適用されます。
import sys, os
import numpy as np
def get_object_by_gid(id):
for dict in data["json"]:
if dict["gid"] == id:
return dict.copy()
def self_exact_node(key):
dict = get_object_by_gid(key)
for k,v in dict.items():
if k == "sub_item" :
item_arr = []
for id in v["gids"]:
item_arr.append(self_exact_node(id))
v["item_arr"] = item_arr.copy()
return dict
def demo():
data_exact = data.copy()
for d in data_exact["json"]:
d = self_exact_node(d["gid"])
def main():
demo()
if __name__ == '__main__':
sys.exit(main())
その他の方法
# グローバル ID 方式
"gid": "大分类 2: 中分类 2: 子分类 2",
複合 ID#
"id":{"l1_cat":"大分类 1","l2_cat":"中分类 2","l3_cat":"子分类 2"}
リンクリスト方式#
"chain":{"next_gid":"","pre_gid":"","head_gid":"","tail_gid":""}
二分木方式#
"btree":{"next_sibling":"","child":""}
テスト用データ
data = {
"json": [{
"gid": "大分类1",
"sub_item": {
"gids": ["大分类1:中分类1", "大分类1:中分类2"]
},
"values": {
"k1": "1000"
}
},
{
"gid": "大分类2",
"sub_item": {
"gids": ["大分类2:中分类1", "大分类2:中分类2"]
},
"values": {
"k1": "2000"
}
},
{
"gid": "大分类1:中分类1",
"sub_item": {
"gids": ["大分类1:中分类1:子分类1", "大分类1:中分类1:子分类2"]
},
"values": {
"k1": "1100"
}
},
{
"gid": "大分类1:中分类2",
"sub_item": {
"gids": ["大分类1:中分类1:子分类1", "大分类1:中分类1:子分类2"]
},
"values": {
"k1": "1200"
}
},
{
"gid": "大分类2:中分类1",
"sub_item": {
"gids": ["大分类2:中分类1:子分类1", "大分类2:中分类1:子分类2"]
},
"values": {
"k1": "2100"
}
},
{
"gid": "大分类2:中分类2",
"sub_item": {
"gids": ["大分类2:中分类2:子分类1", "大分类2:中分类2:子分类2"]
},
"values": {
"k1": "2200"
}
},
{
"gid": "大分类1:中分类1:子分类1",
"sub_item": {
"gids": []
},
"values": {
"k1": "1110"
}
},
{
"gid": "大分类1:中分类1:子分类2",
"sub_item": {
"gids": []
},
"values": {
"k1": "1120"
}
},
{
"gid": "大分类1:中分类2:子分类1",
"sub_item": {
"gids": []
},
"values": {
"k1": "1210"
}
},
{
"gid": "大分类1:中分类2:子分类2",
"sub_item": {
"gids": []
},
"values": {
"k1": "1220"
}
},
{
"gid": "大分类2:中分类1:子分类1",
"sub_item": {
"gids": []
},
"values": {
"k1": "2110"
}
},
{
"gid": "大分类2:中分类1:子分类2",
"sub_item": {
"gids": []
},
"values": {
"k1": "2120"
}
},
{
"gid": "大分类2:中分类2:子分类1",
"sub_item": {
"gids": []
},
"values": {
"k1": "2210"
}
},
{
"gid": "大分类2:中分类2:子分类2",
"id":{"l1_cat":"大分类1","l2_cat":"","l3_cat":""}
"sub_item": {
"gids": []
},
"values": {
"k1": "2220"
}
},
{
"gid": "大分类2:中分类2:子分类2",
/\*複合ID\*/
"id":{"l1_cat":"大分类1","l2_cat":"中分类2","l3_cat":"子分类2"}
/\*リンクリスト方式\*/
"chain":{"next_gid":"","pre_gid":"","head_gid":"","tail_gid":""}
/\*二分木方式\*/
"btree":{"next_sibling":"","child":""}
"sub_item": {
"gids": []
},
"values": {
"k1": "2220"
}
}
]
}