jsonpickle: Как правильно кодировать и отображать дубликаты объектов, а не ссылки? - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь заставить jsonpickle выгружать данные так, чтобы дублированные элементы отображались явно, а не с использованием ссылок. Я попытался кодировать с помощью make_refs=False, что помешало ему использовать ссылки py/id, но все еще не показывало дубликат элемента. Это упрощенный c пример того, с чем я сталкиваюсь:

from typing import List
import jsonpickle

class Thing:
    def __init__(self, name: str = None, desc: str = None):
        self.name = name
        self.desc = desc

class BiggerThing:
    def __init__(self, name: str = None, things: List[Thing] = None):
        self.name = name
        self.things = things if things else []

thing1 = Thing("First", "the first thing")
thing2 = Thing("Seoond", "the second thing")
thing3 = Thing("Third", "the third thing")

main_thing = BiggerThing("The main thing", [thing1, thing2, thing3, thing1])

Если я затем кодирую с использованием jsonpickle.encode(main_thing, make_refs=False, indent=2), результат, который я получаю, выглядит следующим образом:

{
  "py/object": "__main__.BiggerThing",
  "name": "The main thing",
  "things": [
    {
      "py/object": "__main__.Thing",
      "name": "First",
      "desc": "the first thing"
    },
    {
      "py/object": "__main__.Thing",
      "name": "Seoond",
      "desc": "the second thing"
    },
    {
      "py/object": "__main__.Thing",
      "name": "Third",
      "desc": "the third thing"
    },
    "<__main__.Thing object at 0x000001FFACA08408>"
  ]
}

Я не использовал jsonpickle раньше, поэтому я предполагаю, что упускаю что-то простое. Как мне получить его, чтобы jsonpickle вместо этого кодировал его так:

{
  "py/object": "__main__.BiggerThing",
  "name": "The main thing",
  "things": [
    {
      "py/object": "__main__.Thing",
      "name": "First",
      "desc": "the first thing"
    },
    {
      "py/object": "__main__.Thing",
      "name": "Seoond",
      "desc": "the second thing"
    },
    {
      "py/object": "__main__.Thing",
      "name": "Third",
      "desc": "the third thing"
    },
    {
      "py/object": "__main__.Thing",
      "name": "First",
      "desc": "the first thing"
    }
  ]
}

Если есть другой модуль, который сделает это лучше, я тоже открыт для этого. Спасибо!

...