# SMT for Nested JSON record

**URL:** <https://forum.confluent.io/t/smt-for-nested-json-record/2154>\
**Category:** Kafka Connect\
**Created:** [1 July 2021 13:05 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154 "2021-07-01T13:05:09Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![shubhamshirur](https://avatars.discourse-cdn.com/v4/letter/s/4bbf92/32.png) [@shubhamshirur](https://forum.confluent.io/u/shubhamshirur)\
**Post date:** [1 July 2021 13:05 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154/1 "2021-07-01T13:05:10Z")

</div>

How can I access nested fields of JSON record to put **id** field as a key of the record?  
Suppose my JSON data is :

> {  
> “before”: null,  
> “after”: {  
> “id”: 4,  
> “salary”: 5000  
> },  
> “source”: {  
> “version”: “1.5.0.Final”,  
> “connector”: “mysql”,  
> “name”: “Try-”,  
> “ts\_ms”: 1623834752000,  
> “snapshot”: “false”,  
> “db”: “mysql\_db”,  
> “sequence”: null,  
> “table”: “EmpSalary”,  
> “server\_id”: 1,  
> “gtid”: null,  
> “file”: “binlog.000004”,  
> “pos”: 374,  
> “row”: 0,  
> “thread”: null,  
> “query”: null  
> },  
> “op”: “c”,  
> “ts\_ms”: 1623834752982,  
> “transaction”: null  
> }

I want to set my **id** field in **after** section of this JSON as Key of the record. When I am trying to set it with ValuetoKey and ExtractField it’s not recognizing **id**. But it’s recognizing fields like op,ts\_ms,transaction. Can you please help me in this case?

> transforms=createKey,extractInt  
> transforms.createKey.type=org.apache.kafka.connect.transforms.ValueToKey  
> transforms.createKey.fields=id  
> transforms.extractInt.type=org.apache.kafka.connect.transforms.ExtractField$Key  
> transforms.extractInt.field=id

These configurations are giving error that id field is not found.

Thanks in advance.

---

<div class="post-metadata">

**Author:** ![rmoff](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.confluent.io/rmoff/32/3_2.png) [@rmoff](https://forum.confluent.io/u/rmoff)\
**Post date:** [2 July 2021 10:44 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154/2 "2021-07-02T10:44:16Z")

</div>

Is `id` the primary key of your database record? If so, it should get set as the Kafka message key automagically by Debezium

---

<div class="post-metadata">

**Author:** ![shubhamshirur](https://avatars.discourse-cdn.com/v4/letter/s/4bbf92/32.png) [@shubhamshirur](https://forum.confluent.io/u/shubhamshirur)\
**Post date:** [2 July 2021 10:59 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154/3 "2021-07-02T10:59:27Z")

</div>

Yes, it is. What should I set key.converter for getting it in simple string format not struct? Does every connector set primary key as a key of message? @rmoff

---

<div class="post-metadata">

**Author:** ![rmoff](https://sea1.discourse-cdn.com/flex019/user_avatar/forum.confluent.io/rmoff/32/3_2.png) [@rmoff](https://forum.confluent.io/u/rmoff)\
**Post date:** [2 July 2021 13:01 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154/4 "2021-07-02T13:01:14Z")

</div>

> What should I set key.converter for getting it in simple string format not struct?

`org.apache.kafka.connect.storage.StringConverter` probably, although maybe you’ll need a `org.apache.kafka.connect.transforms.ExtractField$Key` Single Message Transform applied to it.

> Does every connector set primary key as a key of message?

No, it’s down to the specific connector to implement it

---

<div class="post-metadata">

**Author:** ![shubhamshirur](https://avatars.discourse-cdn.com/v4/letter/s/4bbf92/32.png) [@shubhamshirur](https://forum.confluent.io/u/shubhamshirur)\
**Post date:** [5 July 2021 05:10 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154/5 "2021-07-05T05:10:01Z")

</div>

@rmoff Thank you so much. It helped.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex019/uploads/confluentcommunity/original/1X/c49438c90c9df282e9996fdf6971be890c71b65a.svg) [@system](https://forum.confluent.io/u/system)\
**Post date:** [4 August 2021 05:10 UTC](https://forum.confluent.io/t/smt-for-nested-json-record/2154/6 "2021-08-04T05:10:09Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
