0

私はPythonクラスに少し慣れていません。私はPythonで作業しましたが、クラスではあまり使用しませんでした. ここで私がやろうとしていることは、JSON を読み取り、要素とノードをクラスとオブジェクトに変換することです。そのため、関数を呼び出して JSON から値を取得します。

{
  "datamap": {
    "version": "1.0",
    "sourceProvider": "example_provider",
    "logicalTables": [
      {
        "name": "region_table_one",
        "physicalTable": "dbo_parent_user", 
        "logicalColumns": [
          {
            "name": "UID",
            "physicalColumnName": "uid_number",
            "displayName": "U Number",
            "logicalDataType": "integer",
            "inputType": {
              "inputAction": "number",
              "multiSelect": false
            },
          },
          {
            "name": "UID1",
            "physicalColumnName": "uid_number1",
            "displayName": "U Number1",
            "logicalDataType": "integer",
            "inputType": {
              "inputAction": "number",
              "multiSelect": false
            },
          },
        ]
      },
      {
        "name": "region_table_two",
        "physicalTable": "dbo_user_two", 
        "logicalColumns": [
          {
            "name": "UID2",
            "physicalColumnName": "uid_number2",
            "displayName": "U Number2",
            "logicalDataType": "integer",
            "inputType": {
              "inputAction": "number",
              "multiSelect": false
            },
          },
          {
            "name": "UID3",
            "physicalColumnName": "uid_number3",
            "displayName": "U Number3",
            "logicalDataType": "integer",
            "inputType": {
              "inputAction": "number",
              "multiSelect": false
            },
          },
        ]
      }
    ]
  }
}

私が書いた Python クラス:

import json

class DataMap(object):
    def __init__(self):
        with open('datamap.json') as f:
            self.__dict__ = json.load(f)

    def get_logical_table(self, tableName):
        if self.datamap['logicalTables']['name'] == tableName:
            return datamap['logicalTables']['name']

obj = DataMap()
print(obj.datamap['logicalTables'])
#print(obj.get_logical_table('logicalTables'))

  • 私がやろうとしているのは、私が呼び出すと 、 とget_logical_tableを取得できるはずです。region_table_oneregion_table_two
  • get_logical_table出力を渡しlogicalColumnsてその JSON オブジェクトの内部を取得する方法はありますか。

私は参照しています:
- https://thepythonguru.com/reading-and-writing-json-in-python/ - Python で json 文字列をオブジェクトに逆シリアル化します 。事前に助けてくれてありがとう。

アップデート:

import json


class DataMap(object):
    def __init__(self):
        self.logical_tables = None
        with open('datamap.json') as f:
            self.__dict__ = json.load(f)
        self.data_map = self.__dict__['datamap']

    def get_map_id(self):
        return self.data_map['mapId']

    def get_version(self):
        return self.data_map['version']

    def get_region(self):
        return self.data_map['region']

    def get_source_provider(self):
        return self.data_map['sourceProvider']

    def __getitem__(self, key):
        return self.data_map[key]

    def __repr__(self):
        return repr(self.data_map)

    def __len__(self):
        return len(self.__dict__['datamap'])

    def copy(self):
        return self.data_map.copy()

    def has_key(self, k):
        return k in self.data_map

    def keys(self):
        return self.data_map.keys()

    def values(self):
        return self.data_map.values()

    def items(self):
        return self.data_map.items()

    def pop(self, *args):
        return self.data_map.pop(*args)

    def __contains__(self, item):
        return item in self.data_map

    def __iter__(self):
        return iter(self.data_map)


class LogicalTables(DataMap):
    def __init__(self):
        DataMap.__init__(self)
        self.logical_tables = self.data_map['logicalTables']

        logical_table = None
        for table in self.get_all_logical_tables():
            self.name = table.get("name")
        print(self.name)

    def __len__(self):
        return len(self.data_map['logicalTables'])

    def __repr__(self):
        return repr(self.logical_tables)

    def createName(self):
        self.name = "Temporary Value"

    def has_key(self, k, table_name=None):
        """Check if the dict has given key"""
        logical_table = self.get_logical_table(table_name)
        return k in logical_table

    def get_all_logical_tables(self, tableName=None):
        return self.data_map['logicalTables']

    def get_logical_table(self, table_name=None):
        logical_table = None
        for table in self.get_all_logical_tables():
            if table.get("name") == table_name:
                logical_table = table
        return logical_table

    def get_logical_table_list(self, table_name=None):
        table_list = []
        for table in self.get_all_logical_tables():
            table_list.append(table.get("name"))
        return table_list


class LogicalColumns(LogicalTables):
    def __init__(self):
        LogicalTables.__init__(self)
        self.logical_columns = self.logical_tables['logicalColumns']

    def __len__(self):
        return len(self.logical_columns['logicalColumns'])

    def __repr__(self):
        return repr(self.logical_columns)

更新しました。これが現在のクラスです。

4

1 に答える 1