2013-03-18 4 views
2

Я портирую код с .Net на python.Пользовательская сериализация Json (de)?

В какой-то момент нам нужно перевести произвольно сложный json из одного формата в другой.

Например:

{"Query": 
    { 
     "Boolean": { 
      "Operator": "And", 
      "Parameters": [ 
       {"Equal": {"Name": "Bob"}}, 
       {"Boolean": ...} 
      ] 
     } 
    } 
} 

К ...

{"Query": 
    { 
     "Left": {"Name":"Bob"}, 
     "Right": {...}, 
     "Operator": "And" 
    } 
} 

Мы использовали Json.Net отличные Newtonsoft.Json.JsonConverter вклиниться в процесс сериализации/десериализации. У нас есть 2 JsonConverter s, которые конвертируют из одних и тех же объектов в/из каждого из этих форматов.

Public Overrides Function CanConvert(objectType As Type) As Boolean 
    Return GetType(QueryDefinition).IsAssignableFrom(objectType) 
End Function 

Это означает, что мы можем выбрать биты, которые мы хотим обрабатывать вручную и позволяют запас конвертер сделать все свойства/значение, которые мы не должны рассматривать специально.

Есть ли эквивалентный механизм/рамки в Python? или мне придется вручную анализировать каждое свойство рекурсивно?

ответ

3

Вы можете подклассифицировать JSONEncoder по умолчанию.

От: http://docs.python.org/2/library/json.html

«Для того, чтобы использовать пользовательский подкласс JSONEncoder (например, тот, который имеет приоритет по умолчанию метод() для сериализации дополнительных типов), укажите его с ЦБСОМ kwarg, в противном случае используется JSONEncoder.»

http://docs.python.org/2/library/json.html#json.JSONEncoder

Пример использования: Custom JSON encoder in Python 2.7 to insert plain JavaScript code

+0

Благодаря. У вас есть пример того, что используется? ... Это было быстро спасибо. Я соглашусь, когда истечет время ожидания – Basic

Смежные вопросы