File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -277,6 +277,28 @@ Gives us:
277277"{"a":1,"b":0.5}"
278278```
279279
280+ ### ` proc dumpRenameHook*() ` Can be used to rename fields when serializing.
281+
282+ If you want to rename some fields when serializing, declare ` dumpRenameHook*() `
283+
284+ ``` nim
285+ type Node = ref object
286+ kind: string
287+
288+ proc dumpRenameHook*(v: typedesc[Node], fieldName: var string) =
289+ if fieldName == "kind":
290+ fieldName = "type"
291+
292+ var node = Node(kind: "root")
293+ let s = node.toJson()
294+ ```
295+
296+ Gives us:
297+
298+ ```
299+ {"type":"root"}
300+ ```
301+
280302## Static writing with ` toStaticJson ` .
281303
282304Sometimes you have some json, and you want to write it in a static way. There is a special function for that:
Original file line number Diff line number Diff line change @@ -758,9 +758,9 @@ proc dumpHook*(s: var string, v: string) =
758758
759759 s.add '"'
760760
761- template dumpKey (s: var string , v: string ) =
762- const v2 = jsony.toJson (v) & " : "
763- s.add v2
761+ template dumpKey (s: var string , v: var string ) =
762+ s. add jsony.toJson (v)
763+ s.add " : "
764764
765765proc dumpHook * (s: var string , v: char ) =
766766 s.add '"'
@@ -819,19 +819,24 @@ proc dumpHook*(s: var string, v: object) =
819819 else :
820820 # Normal objects.
821821 for k, e in v.fieldPairs:
822+ var key = k
822823 when compiles (skipHook (type (v), k)):
823824 when skipHook (type (v), k):
824825 discard
825826 else :
827+ when compiles (dumpRenameHook (type (v), key)):
828+ dumpRenameHook (type (v), key)
826829 if i > 0 :
827830 s.add ','
828- s.dumpKey (k )
831+ s.dumpKey (key )
829832 s.dumpHook (e)
830833 inc i
831834 else :
835+ when compiles (dumpRenameHook (type (v), key)):
836+ dumpRenameHook (type (v), key)
832837 if i > 0 :
833838 s.add ','
834- s.dumpKey (k )
839+ s.dumpKey (key )
835840 s.dumpHook (e)
836841 inc i
837842 s.add '}'
Original file line number Diff line number Diff line change 1+ import jsony
2+
3+ type
4+ Foo = object
5+ aVal: int
6+ bVal: bool
7+
8+ proc dumpRenameHook (v: typedesc [Foo ], fieldName: var string ) =
9+ if fieldName == " aVal" :
10+ fieldName = " a_val"
11+
12+ let v = Foo (aVal:2 , bVal: true )
13+ let ser = v.toJson ()
14+ echo $ ser
15+ doAssert ser ==
16+ """ {"a_val":2,"bVal":true} """
You can’t perform that action at this time.
0 commit comments