簡體   English   中英

列表中的Python對象為JSON

[英]Python objects in list as JSON

我有兩個使用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":..}]
}]

這將為您工作:

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}]}]
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}]}']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM