如何在TypeScript中用类Jackson库生成带点的JSON字段名
在TypeScript中生成含点(.)字段名的JSON(类Jackson库适配方案)
需求与问题
需要生成含点字段名的JSON,期望输出:
{ "tasks.max": "1", "key.converter": "io.confluent.connect.avro.AvroConverter", "topics": "eraseme_topic_schema_test_v05" }
使用ts-jackson时,因误用path参数导致输出嵌套对象而非带点字段名,实际输出:
{ "tasks": { "max": "1" }, "key": { "converter": "io.confluent.connect.avro.AvroConverter" }, "topics": "eraseme_topic_schema_test_v05" }
解决方案
1. 使用jackson-js(推荐)
jackson-js中,@JsonProperty的name参数用于直接指定JSON输出的键名,而非path(path用于解析嵌套JSON结构到类属性)。
修改后的代码:
import { JsonProperty, Serializable, JsonMapper } from 'jackson-js'; @Serializable() export class MyDomain { // 用name指定带点的JSON键名 @JsonProperty({ name: 'tasks.max' }) tasks_max: string; @JsonProperty({ name: 'key.converter' }) key_converter: string; // 属性名与JSON键名一致时可省略name参数 @JsonProperty() topics: string; } // 序列化示例 const mapper = new JsonMapper(); const domain = new MyDomain(); domain.tasks_max = '1'; domain.key_converter = 'io.confluent.connect.avro.AvroConverter'; domain.topics = 'eraseme_topic_schema_test_v05'; const jsonString = mapper.stringify(domain); console.log(jsonString); // 输出符合期望的带点字段JSON
2. 调整ts-jackson用法
ts-jackson中,@JsonProperty直接传入字符串即可指定JSON键名,而非使用path参数(path用于反向解析嵌套JSON)。
修改后的代码:
import { JsonProperty, Serializable, serialize } from 'ts-jackson'; @Serializable() export class MyDomain { @JsonProperty('tasks.max') tasks_max: string; @JsonProperty('key.converter') key_converter: string; @JsonProperty('topics') topics: string; } // 序列化示例 const domain = new MyDomain(); domain.tasks_max = '1'; domain.key_converter = 'io.confluent.connect.avro.AvroConverter'; domain.topics = 'eraseme_topic_schema_test_v05'; const jsonString = serialize(domain); console.log(jsonString); // 输出符合期望的带点字段JSON
关键说明
path参数的作用是解析嵌套JSON结构到类属性,而非设置输出的JSON键名;- 要直接指定带点的JSON字段名,需使用库提供的「键名映射参数」(如jackson-js的
name,ts-jackson的直接传参)。
内容的提问来源于stack exchange,提问作者Luis Estrada
相关产品推荐
相关产品推荐

