Python中用户类的序列化

时间:2018-09-26 12:21:46

标签: python json serialization

我想使用对象的类型作为字典键,最好将这样的字典序列化为JSON字符串。可以反序列化它,然后使用简单的“ if SomeType in SomeDictionary”检查。

演示该问题的最小代码示例:

import json

class Cat():
  def __init__(self, name):
    self.name = name

class Dog():
  def __init__(self, name):
    self.name = name

pets = dict()
pets[Cat] = Cat("Tom")
pets[Dog] = Dog("Rex")

print(pets.keys())
print(json.dumps(pets))

我得到了错误:

dict_keys([<class '__main__.Cat'>, <class '__main__.Dog'>])
Traceback (most recent call last):
  File "python", line 17, in <module>
TypeError: keys must be a string

第17行表示带有“ print(json.dumps(pets))”的行。

是否可以在Python中实现这种行为?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

try{
    JSONArray parametersForPhp = new JSONArray();

            JSONObject jsonObject = new JSONObject();
            jsonObject.put(key,value);
            jsonObject.put(key,value);

            parametersForPhp.put(jsonObject);
 JsonArrayRequest arrayRequest = new JsonArrayRequest(Request.Method.POST, httpurl, parametersForPhp,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG,response.toString());
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            });
            RequestQueueSingleton.getInstance(getApplicationContext()).addToRequestQueue(arrayRequest);
}catch(Exception e){
e.printStackTrace();
}

答案 1 :(得分:1)

替代解决方案

pets = {"Tom" : Cat("Tom"), "Rex" : Dog("Rex")}
print(pets.keys())
print(json.dumps(pets))

最后,如果不遍历所有值,就无法说“词典中有猫还是狗”