JOSN字符串转换为自定义类实例对象
有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下:
{"Name": "Tom", "Sex": "Male", "BloodType": "A", "Hobbies": ["篮球", "足球"]}
我需要把这个转换为具体的一个Person类的实例,通过对象的方式来进行操作。在Java中有很多实现比如Gson或者FastJosn。如下代码所示(这里不是全部代码,值标识最主要的部分):
import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.Product;
String a = "{\"gmtCreate\":1559009853000,\"dataFormat\":1,\"deviceCount\":1,\"nodeType\":0,\"productKey\":\"a1U85pSQrAz\",\"productName\":\"温度计\"}";
//JSON字符串反序列化为一个Product对象
Product product = JSONObject.parseObject(a, Product.class);
上述这种需求一般发生在前段传递过来JSON字符串或者其他系统进行RPC通信的时候也发送过来JSON字符串,作为接收端需要反序列化成对象来进行处理,而且Fastjson里还有一个JSONArray.parseArray方法可以转换为对象列表。可是在Python没有像Java中这么方便的东西。当然在Django的RESTframework框架中有这种进行序列化和反序列化的功能可以使用。这里只是对一个问题的思考,如果遇到这种情况自己怎么解决。
从网上论坛中也看到过一些,不过很多都是效果有但是使用起来麻烦,所以我这里也来说一下我的思路。
方式1:通过josn.loads来实现
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import json
class Person:
def __init__(self, data=None):
self._name = "1"
self._sex = ""
self._blood_type = "O"
self._hobbies &