bugfix> python > 投稿

Object_pairs_hooksに2つの引数(KeepDuplicatesとOrderDic)を渡そうとしていますが、pythonicの方法がわからないので、誰か助けてもらえますか?

raw_data = json.loads(json_value, object_pairs_hook=KeepDuplicates, object_pairs_hook=OrderedDict)

KeepDuplicates-重複したJSONキーを許可します

OrderDic-JSONを入力JSONと同じ順序で整理する必要があります

ありがとうございました!!

回答 1 件
  • json.loads  キー/値のペアのリストを作成し、デフォルトのアクションは dict を適用することです  それにそれを返します。 object_pairs_hook   dict の代わりにリストにしたいことを何でもします 。

    object_pairs_hook を設定した場合   lambda x: x へ  (各要素をそのまま返す)、key_valueペアのリストを読み取り順に返します。

    >>> x = '{"3": 3, "0": 0, "1": 1, "2": 2, "3": 3, "4": 4}'
    >>> json.loads(x, object_pairs_hook=lambda el: el)
    [('3', 3), ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)]
    
    

    その後、順序付けられたキー/値のペアを使用して、任意の種類のオブジェクトを作成できます。これは、順序を保ち、複製を保持するための非常に効果的な方法です。独自のオブジェクトを作成していない限り、重複キーを受け入れる辞書のようなクラスを認識していません。リストはあなたの最善策、またはあなた自身のクラスかもしれません。

    class SillyClass(object):
        def __init__(self, a_list):
            self._list = a_list[:]
        def show(self):
            return self._list[:]
    to_test = json.loads(x, object_pairs_hook=SillyClass)
    print(to_test.show())
    
    

    出力=>  [('3', 3), ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4)]

あなたの答え