>백엔드 개발 >파이썬 튜토리얼 >Python은 JSON 저장 및 구문 분석을 지원하는 객체를 구현합니다.

Python은 JSON 저장 및 구문 분석을 지원하는 객체를 구현합니다.

高洛峰
高洛峰원래의
2017-03-23 16:08:101311검색

JSON 모듈을 사용하면 Python 기본 유형(dict, list 등) 데이터를 파일에 영구적으로 편리하게 저장할 수 있고, 사용자 정의 변환 기능을 통해 변환할 수도 있다는 것을 알고 있습니다. JSON encode&decode 메소드를 상속하여 사용자 정의 클래스 저장소를 구현합니다. 이 글은 JSON 저장소를 지원하는 Python의 객체를 구현하기 위해 이전 "Python JSON 모듈"을 기반으로 작성되었습니다.

객체가 JSON을 저장하고 구문 분석할 수 있다는 것은 매우 타당합니다. 예를 들어, 머신러닝의 모든 분류 알고리즘의 학습 과정에는 많은 양의 데이터 계산이 포함되며, 분류가 시작될 때마다 분류 알고리즘을 다시 학습해야 한다면 이는 자원 낭비이고 비효율적입니다. 훈련에 의해 생성된 알고리즘 객체는 저장될 수 있으며, 필요하지 않은 경우 알고리즘 튜닝은 나중에 로드하면 됩니다. 반면에 JSON을 구문 분석하고 저장하는 개체의 기능을 통해 네트워크를 통해 전송할 수도 있으며, 이는 현재 클라우드 컴퓨팅 및 분산 데이터 처리에서 매우 중요합니다.

자체 저장 및 구문 분석을 구현하기 위해 객체 정의의 주요 작업은 다음과 같습니다.

0, 추가 object_json.py 복사 패키지에, 객체를 정의하는 모듈은 object_json을 가져옵니다: import object_json.

1. init() 함수는 다양한 수의 함수 호출을 지원해야 합니다. 즉, init(self, …, , **args)로 작성되어야 합니다. 이런 방식으로 객체를 정의해야만 생성 단계에서 초기화해야 하는 속성 이외의 속성을 가질 수 있습니다.

2. 객체 생성 단계에서 초기화해야 하는 속성의 경우 init() 함수의 형식 매개변수는 사전을 통해 생성할 수 있도록 이러한 속성의 이름과 정확히 동일해야 합니다. 'key': 값 쌍 개체입니다.

3. 검사 모듈을 사용하여 구현된 객체 인스턴스의 이름인 'name' 속성을 정의합니다. 'name' 속성은 객체를 저장할 때 기본 파일 이름을 생성하는 데 주로 사용됩니다.

4, jsonDumps() 및 jsonLoadTransfer() 메서드를 정의하고, objectLoadFromFile()을 통해 개체 JSON 파일 로드 및 새 개체 생성을 완료합니다.

(i) jsonDumps()는 json.dumps()를 통해 객체를 dict로 변환하고 객체를 json 파일로 저장하는 데 사용됩니다. 사용자가 파일 이름을 지정하지 않으면 인스턴스 이름.json이 기본 저장 파일입니다. . JSON은 Python 기본 유형만 지원하므로 객체에 다른 유형(예: numpy 행렬)이 있는 경우 Python 기본 유형(예: 행렬을 목록으로 변환하려면 Matrix.tolist())으로 변환해야 합니다.

(ii) jsonLoadTransfer()는 데이터 형식 변환을 완료하고 일부 객체 속성을 기본 유형에서 필수 유형으로 변환하는 데 사용됩니다(예: 유형을 목록에서 행렬로 변환하는 mat(list)). Python 기본 유형의 객체에서만 이 메서드를 생략할 수 있습니다. 완전하고 사용 가능한 객체를 생성하는 과정은 다음과 같습니다.

obj = objectLoadFromFile()   
obj.jsonLoadTransfer()

다음 코드는 JSON 저장 및 구문 분석을 위한 사용자 정의 객체를 지원하는 object_json 모듈의 소스 코드입니다.

import json   
import inspect    
import pdb   
def object2dict(obj):      
    #convert object to a dict      
    d = {'class':obj.class.name, 'module':obj.module}      
    d.update(obj.dict)      
    return d   
def objectDumps2File(obj, jsonfile):   
    objDict = object2dict(obj)   
    with open(jsonfile, 'w') as f:   
        f.write(json.dumps(objDict))   

def dict2object(d):      
    '''convert dict to object, the dict will be changed'''       
    if'class' in d:      
        class_name = d.pop('class')      
        module_name = d.pop('module')      
        module = import(module_name)      
        #print 'the module is:', module      
        class_ = getattr(module,class_name)      
        args = dict((key.encode('ascii'), value) for key, value in d.items()) #get args     
        #print 'the atrribute:', repr(args)   
        #pdb.set_trace()   
        inst = class_(**args) #create new instance      
    else:      
        inst = d      
    return inst   
def objectLoadFromFile(jsonFile):   
    '''load json file and generate a new object instance whose name filed  
    will be 'inst' '''  
    with open(jsonFile) as f:   
        objectDict =json.load(f)   
    obj = dict2object(objectDict)   
    return obj   
#test function      
if name  == 'main':   
    class Person(object):      
        def init(self,name,age, **args):   
            obj_list = inspect.stack()[1][-2]   
            self.name = obj_list[0].split('=')[0].strip()#object instance name   
            self.name = name      
            self.age = age   

        def repr(self):      
            return 'Person Object name : %s , age : %d' % (self.name,self.age)   
        def say(self):   
            #d = inspect.stack()[1][-2]   
            #print d[0].split('.')[0].strip()   
            return self.name  
        def jsonDumps(self, filename=None):   
            '''essential transformation to Python basic type in order to  
            store as json. dumps as objectname.json if filename missed '''  
            if not filename:   
                jsonfile = self.name+'.json'   
            else: jsonfile = filename   
            objectDumps2File(self, jsonfile)   

        def jsonLoadTransfer(self):#TBD   
            '''essential transformation to object required type,such as  
            numpy matrix.call this function after newobject = objectLoadFromFile(jsonfile)'''  
            pass  

    p = Person('Aidan',22)        
    #json.dumps(p)#error will be throwed   

    #objectDumps2File(p,'Person.json')   
    p.jsonDumps()   
    p_l = objectLoadFromFile('p.json')   

    print 'the decoded obj type: %s, obj:%s' % (type(p_l),repr(p_l))

Python 클래스에는 이전 클래스와 새 클래스의 두 가지 유형이 있습니다. py 2.2 이후 객체를 상속하는 목적은 이 클래스를 새로운 스타일 클래스로 만드는 것입니다. 결국 객체를 상속받습니다).

클래스 정의에는 두 가지 메소드가 있습니다.

class Person():   
class Person(object)

차이점은 다음과 같습니다.

새 Person 인스턴스 테스트가 생성되면 유형(테스트)의 출력은 다음과 같습니다.

<type &#39;instance&#39;>   
<class &#39;main.Person&#39;>

inspect 모듈은 모듈, 클래스, 메소드, 함수, 역추적, 프레임 객체 및 코드 객체에 대한 정보를 얻을 수 있는 일련의 자체 검사 기능을 제공합니다. 일반적으로 사용되는 메소드는 getmembers, ismodule, getcallargs, isclass 등입니다.

위 내용은 Python은 JSON 저장 및 구문 분석을 지원하는 객체를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.