#rust #serde #serde-json
Вопрос:
У меня есть эта структура, в которой есть поле, содержащее тип Option<serde_json::Value>
Я хочу иметь возможность хранить любой объект( т. Е. Объект, созданный любой структурой) в этом поле. Текущий подход, который я использую, заключается в том, чтобы сначала преобразовать объект в строку JSON (с помощью serde_json::to_string
), а затем снова преобразовать его в serde_json::Value
using serde_json::from_str
.
Я делаю это для того, чтобы я мог отправлять различные виды запросов JSON с произвольными данными.
Итак, есть ли способ преобразовать любой serde-сериализуемый объект в serde_json::Value
без выполнения serde_json::to_string
и serde_json::from_str
? Если я иду по неправильному пути, пожалуйста, предложи что-нибудь получше, Тай!
Ответ №1:
Есть serde_json::value::to_value()
специально для этого:
pub fn to_value<T>(value: T) -> Result<Value, Error> where
T: Serialize,
То есть to_value
берет все T
, что есть Serialize
, и выдает вам Value
или ошибку (в случае сбоя сериализации).