Home Backend Development Python Tutorial Python implements objects that support JSON storage and parsing

Python implements objects that support JSON storage and parsing

Mar 23, 2017 pm 04:08 PM
json

We know that the JSON module can be used to conveniently store Python basic type (dict, list, etc.) data into files permanently, and at the same time, it can also be converted through custom functions and InheritThe JSON encode&decode method implements the storage of custom classes. This article is based on the previous "Python JSON module" to implement objects that Python supports JSON storage.

It makes great sense for objects to be stored and parsed in JSON. For example, there is a large amount of data calculation in the training process of all classification algorithms in machine learning. If the classification algorithm needs to be retrained every time the classification is started, it is a waste of resources and inefficient. If the classification algorithm object generated by the training can be saved, then unless needed Algorithm tuning only needs to be loaded later. On the other hand, the ability of objects to parse and store JSON also allows them to be transmitted over the network, which is of great significance in current cloud computing and distributed data processing.

In order to realize self-storage and parsing, the key operations of defining an object are:

0, add object_json.py copy to the package, The module that defines the object imports object_json: import object_json.

1. The init() function must support a variable number of function calls, that is, it must be written as init(self, …, , **args). Only by defining the object in this way can it have properties other than the properties that need to be initialized during the construction phase.

2. For attributes that must be initialized during the object construction phase, the formal parameters in the init() function must be exactly the same as the names of these attributes, so that they can be constructed through the dictionary 'key': value pair object.

3. Define an attribute ‘name’ – the name of the object instance, implemented using the inspect module. The ‘name’ attribute is mainly used to generate the default file name when storing objects.

4, define jsonDumps() and jsonLoadTransfer() methods, complete object JSON file loading and new object creation through objectLoadFromFile().

(i) jsonDumps() is used to convert objects into dict and store objects into json files through json.dumps(). If the user does not specify a file name, instancename.json will be the default storage file. Since JSON only supports Python basic types, if there are some other types in the object (such as numpy matrix), they need to be converted into Python basic types (such as matrix.tolist() to convert matrix into list).

(ii) jsonLoadTransfer() is used to complete the conversion of data format and convert some object attributes from basic types to required types (such as mat(list) to convert the type from list to matrix). If the object only has Python basic types can omit this method. The process of creating a complete and usable object is:

obj = objectLoadFromFile()   
obj.jsonLoadTransfer()
Copy after login

The following code is the source code of the object_json module that supports custom objects for JSON storage and parsing.

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))
Copy after login

There are two types of Python classes, old and new. The purpose of inheriting object after py 2.2 is to make this class a new style class. Those that do not inherit object are traditional classic classes (which will eventually inherit object).

The following two methods are included in the class definition:

class Person():   
class Person(object)
Copy after login

The difference is:

If a new Person instanc test is created, the output of type (test) is:

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

The inspect module provides a series of introspection functions, which can obtain information about modules, classes, methods, functions, tracebacks, frame objects, and code objects. Commonly used methods are getmembers, ismodule, getcallargs, isclass, etc.,

The above is the detailed content of Python implements objects that support JSON storage and parsing. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Combination of golang WebSocket and JSON: realizing data transmission and parsing Combination of golang WebSocket and JSON: realizing data transmission and parsing Dec 17, 2023 pm 03:06 PM

The combination of golangWebSocket and JSON: realizing data transmission and parsing In modern Web development, real-time data transmission is becoming more and more important. WebSocket is a protocol used to achieve two-way communication. Unlike the traditional HTTP request-response model, WebSocket allows the server to actively push data to the client. JSON (JavaScriptObjectNotation) is a lightweight format for data exchange that is concise and easy to read.

How to exclude a field from JSON using @Expose annotation in Java? How to exclude a field from JSON using @Expose annotation in Java? Sep 16, 2023 pm 09:49 PM

The Gson@Expose annotation can be used to mark whether a field is exposed (contained or not) for serialization or deserialization. The @Expose annotation can take two parameters, each parameter is a boolean value and can take the value true or false. In order for GSON to react to the @Expose annotation, we have to create a Gson instance using the GsonBuilder class and need to call the excludeFieldsWithoutExposeAnnotation() method, which configures Gson to exclude all fields without Expose annotation from serialization or deserialization. Syntax publicGsonBuilderexclud

What is the difference between MySQL5.7 and MySQL8.0? What is the difference between MySQL5.7 and MySQL8.0? Feb 19, 2024 am 11:21 AM

MySQL5.7 and MySQL8.0 are two different MySQL database versions. There are some main differences between them: Performance improvements: MySQL8.0 has some performance improvements compared to MySQL5.7. These include better query optimizers, more efficient query execution plan generation, better indexing algorithms and parallel queries, etc. These improvements can improve query performance and overall system performance. JSON support: MySQL 8.0 introduces native support for JSON data type, including storage, query and indexing of JSON data. This makes processing and manipulating JSON data in MySQL more convenient and efficient. Transaction features: MySQL8.0 introduces some new transaction features, such as atomic

Performance optimization tips for converting PHP arrays to JSON Performance optimization tips for converting PHP arrays to JSON May 04, 2024 pm 06:15 PM

Performance optimization methods for converting PHP arrays to JSON include: using JSON extensions and the json_encode() function; adding the JSON_UNESCAPED_UNICODE option to avoid character escaping; using buffers to improve loop encoding performance; caching JSON encoding results; and considering using a third-party JSON encoding library.

How to handle XML and JSON data formats in C# development How to handle XML and JSON data formats in C# development Oct 09, 2023 pm 06:15 PM

How to handle XML and JSON data formats in C# development requires specific code examples. In modern software development, XML and JSON are two widely used data formats. XML (Extensible Markup Language) is a markup language used to store and transmit data, while JSON (JavaScript Object Notation) is a lightweight data exchange format. In C# development, we often need to process and operate XML and JSON data. This article will focus on how to use C# to process these two data formats, and attach

Use the json.MarshalIndent function in golang to convert the structure into a formatted JSON string Use the json.MarshalIndent function in golang to convert the structure into a formatted JSON string Nov 18, 2023 pm 01:59 PM

Use the json.MarshalIndent function in golang to convert the structure into a formatted JSON string. When writing programs in Golang, we often need to convert the structure into a JSON string. In this process, the json.MarshalIndent function can help us. Implement formatted output. Below we will explain in detail how to use this function and provide specific code examples. First, let's create a structure containing some data. The following is an indication

Pandas usage tutorial: Quick start for reading JSON files Pandas usage tutorial: Quick start for reading JSON files Jan 13, 2024 am 10:15 AM

Quick Start: Pandas method of reading JSON files, specific code examples are required Introduction: In the field of data analysis and data science, Pandas is one of the important Python libraries. It provides rich functions and flexible data structures, and can easily process and analyze various data. In practical applications, we often encounter situations where we need to read JSON files. This article will introduce how to use Pandas to read JSON files, and attach specific code examples. 1. Installation of Pandas

How do annotations in the Jackson library control JSON serialization and deserialization? How do annotations in the Jackson library control JSON serialization and deserialization? May 06, 2024 pm 10:09 PM

Annotations in the Jackson library control JSON serialization and deserialization: Serialization: @JsonIgnore: Ignore the property @JsonProperty: Specify the name @JsonGetter: Use the get method @JsonSetter: Use the set method Deserialization: @JsonIgnoreProperties: Ignore the property @ JsonProperty: Specify name @JsonCreator: Use constructor @JsonDeserialize: Custom logic

See all articles