You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Proto3非可选字段默认值JSON序列化问题求助

解决Proto3非可选参数默认值JSON序列化显示问题

Proto3默认行为是:非optional修饰的字段,即使值为默认值也不会被序列化到JSON中;而optional字段的默认值会被包含。要让非可选字段的默认值也出现在JSON里,确实需要通过配置JsonPrintOptions参数实现。

具体实现步骤

  1. 创建JsonPrintOptions对象,开启including_default_value_fields选项
  2. 将该选项传入MessageToJsonString方法,替代默认调用

修改后的代码示例

std::string req_message_str;
google::protobuf::util::JsonPrintOptions json_options;

// 核心配置:强制序列化所有字段的默认值
json_options.including_default_value_fields = true;
// 可选配置:保留proto中定义的原始字段名(比如下划线命名,默认会转驼峰)
json_options.preserving_proto_field_names = true;

// 带选项调用序列化方法,同时捕获状态判断是否成功
google::protobuf::util::Status serialize_status = 
    google::protobuf::util::MessageToJsonString(deserialized_set_ru_conf, &req_message_str, json_options);

if (!serialize_status.ok()) {
    std::cerr << "JSON序列化失败:" << serialize_status.ToString() << std::endl;
    // 这里可以添加错误处理逻辑
}
std::cout << req_message_str << std::endl;

关键参数说明

  • including_default_value_fields: 设为true后,所有字段(无论是否为optional)的默认值都会被输出到JSON中
  • preserving_proto_field_names: 可选参数,若需保持proto文件中定义的下划线格式字段名(而非自动转为驼峰命名),可开启此选项

内容的提问来源于stack exchange,提问作者Enes Aygün

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:36:01