0

そこにはかなりの数のjson / pythonの質問があることは知っていますが、これを理解できないようです。2 つのリストを同じファイルにシリアル化しようとしています。そのために、2 つのリストを保持する新しいクラスを作成します。

class newJSON(object):
    def __init__(self, list1, list2):
        self.data = {'data': list1, 'info' : list2}

結果のデータ ファイルを次のようにする必要があります。

{
    "data" : [
        {
            "name" : "aName" ,
            "coordinates" : {"obj2" : 33, "obj3" : 71} 
        } , {
            "name" : "bName" ,
            "coordinates" : {"obj2" : 12, "obj3" : 77} 
        }
        ] ,
    "info" : [
        {
            "first" : ["xxx" , "yyy"] ,
            "space" : 21
        } , {
            "first" : ["aaa" , "bbb"] ,
            "space" : 12
        }
        ]
}

次に、 Serializing python object instance to JSONおよびその他のいくつかで推奨されているように、オブジェクトをデコードします。

jsonToEncode = newJSON(myList1, myList2)
myNewJSONData = json.dumps(jsonToEncode.__dict__)

ただし、「JSONシリアライズ可能エラーではありません」というメッセージが表示されます... dictの有無にかかわらずこれを試しましたが、成功しませんでした。JSON は、上記の形式である必要があります。何が問題ですか?

ありがとう

****編集****

2 つのリストを作成するために、表示されている json とまったく同じようにフォーマットされた json ファイルを取得し、次の操作を行います。

list1 = [obj1(**myObj) for myObj in data["data"]]

list2 についても同様です。obj1 は次のように作成されます。

class obj1(object):
    def__init__(self, name, coordinates): 
        self.name = name 
        self.coordinate = coordinates
4

4 に答える 4

2

新しいオブジェクトを作成する必要はありません。辞書を直接シリアル化するだけです。

myNewJSONData = json.dumps({'data': list1, 'info': list2})

ただし、コードは別の方法で機能するはずです。おそらくデータが含まれてlist1おり、list2それはシリアル化できません。

于 2013-02-28T13:24:59.160 に答える
0

simplejsonライブラリを使用します。

from simplejson import loads, dumps
print loads(json_string) # Converts a JSON string to dict
print dumps(python_object) # Converts any valid python object/dict to valid JSON string

https://pypi.python.org/pypi/simplejsonをご覧ください。

于 2013-02-28T13:37:00.977 に答える
0

myNewJSONData = json.dumps(jsonToEncode.data)代わりに試してください。

またはさえmyNewJSONData = json.dumps({'data': list1, 'info' : list2})jsonToEncodeとにかく、なぜそのクラスを使用するのですか?

于 2013-02-28T13:23:54.570 に答える
0

これを試して:

myNewJSONData = json.dumps(jsonToEncode.data, indent=2)

またはこれ:

>>> class newJSON2(dict):
...     def __init__(self, list1, list2):
...         self['data'] = list1
...         self['info'] = list2
>>> 
>>> 
>>> json2 = newJSON2(list1, list2)
>>> json2
{'info': [{'space': 21, 'first': ['xxx', 'yyy']}, {'space': 12, 'first': ['aaa', 'bbb']}], 'data': [{'name': 'aName', 'coordinates': {'obj3': 71, 'obj2': 33}}, {'name': 'bName', 'coordinates': {'obj3': 77, 'obj2': 12}}]}
>>> print json.dumps(json2, indent=2)
{
  "info": [
    {
      "space": 21, 
      "first": [
        "xxx", 
        "yyy"
      ]
    }, 
    {
      "space": 12, 
      "first": [
        "aaa", 
        "bbb"
      ]
    }
  ], 
  "data": [
    {
      "name": "aName", 
      "coordinates": {
        "obj3": 71, 
        "obj2": 33
      }
    }, 
    {
      "name": "bName", 
      "coordinates": {
        "obj3": 77, 
        "obj2": 12
      }
    }
  ]
}
>>> 
于 2013-02-28T13:33:01.973 に答える