列表中的Python对象作为JSON

2024-04-25 20:45:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个类,使用python 2.7:

class Script(object):
    name = ""
    version = 0
    dependency = []

class Dependency(object):
    name = ""
    version = 0

在列表listOfScripts中结束,如下所示:

listOfScripts = [20, 3, [39, 2, 30, 4], 21, 4, [65, 9, 12, 5]]

如何将此列表转储为json?我希望最终输出为:

[{ "name":...
"version":...
"dependency": [{"name": .., "version":..},  {"name": .., "version":..}]
}]

Tags: namejson列表objectversionscriptdependencyclass
2条回答
import json
class Script(object):
    def __init__(self, name, version, dependency):
        self.name = name
        self.version = version
        self.dependency = dependency
    def toJSON(self):
        return dict(name = self.name, version = self.version, dependency = self.dependency)

class Dependency(object):
    def __init__(self, name, version):
        self.name = name
        self.version = version
    def toJSON(self):
        return dict(name = self.name, version = self.version)

class ComplexEncoder(json.JSONEncoder):
    def default(self, obj):
        if hasattr(obj,'toJSON'):
            return obj.toJSON()
        else:
            return json.JSONEncoder.default(self, obj)

listOfScripts = [Script(20, 3, [Dependency(39, 2), Dependency(30, 4)]), 
                 Script(21, 4, [Dependency(65, 9), Dependency(12, 5)])]
print([json.dumps(x.toJSON(), cls=ComplexEncoder) for x in listOfScripts])

输出为:

['{"name": 20, "version": 3, "dependency": [{"name": 39, "version": 2}, {"name": 30, "version": 4}]}', '{"name": 21, "version": 4, "dependency": [{"name": 65, "version": 9}, {"name": 12, "version": 5}]}']

这对您很有用:

import json

class Script(object):
    def __init__(self, name, version, dependency_list):
        self.name = name
        self.version = version
        self.dependency_list = self.parse_dependencies(dependency_list)

    def parse_dependencies(self, dep_list):
        """
        Take our dependency list and turn it into a list of Dependency objects.
        """
        dependency_list = []
        for i in xrange(0, len(dep_list), 2):
            d = Dependency(dep_list[i], dep_list[i+1])
            dependency_list.append(d)
        return dependency_list

    def output_to_json(self):
        """
        Output our self to a dict that can be used in a json.dumps()
        """
        context = {
            'name': self.name,
            'version': self.version,
            'dependencies': [c.output_to_json() for c in self.dependency_list]
        }
        return context


class Dependency(object):
    def __init__(self, name, version):
        self.name = name
        self.version = version

    def output_to_json(self):
        context = {
            'name': self.name,
            'version': self.version
        }
        return context


def make_classes_from_list(list_of_scripts):
    """
    Take your list of numbers and turn it into a list of Script
    and Dependency objects.
    """
    output = []
    for i in xrange(0, len(list_of_scripts), 3):
        s = Script(list_of_scripts[i], list_of_scripts[i+1], list_of_scripts[i+2])
        output.append(s)
    return output


listOfScripts = [20, 3, [39, 2, 30, 4], 21, 4, [65, 9, 12, 5]]
list_of_script_objects = make_classes_from_list(listOfScripts)

print(json.dumps([x.output_to_json() for x in list_of_script_objects]))

然后将输出:

[{"version": 3, "name": 20, "dependencies": [{"version": 2, "name": 39}, {"version": 4, "name": 30}]}, {"version": 4, "name": 21, "dependencies": [{"version": 9, "name": 65}, {"version": 5, "name": 12}]}]

相关问题 更多 >