diff modules/json.tp @ 271:bb4723fec05e

Support for encoding objects, dictionaries, lists and arrays to JSON in json module
author Michael Pavone <pavone@retrodev.com>
date Sat, 19 Jul 2014 19:59:51 -0700
parents 9d8ae39e8e67
children bb2b4613fdc8
line wrap: on
line diff
--- a/modules/json.tp	Fri Jul 18 20:45:50 2014 -0700
+++ b/modules/json.tp	Sat Jul 19 19:59:51 2014 -0700
@@ -163,5 +163,35 @@
 		decode <- :text {
 			(_decode: text at: 0) value
 		}
+
+		encode <- :value {
+			if: (object does: value understand?: "jsonEncode") {
+				value jsonEncode
+			} else: {
+				toEncode <- #[]
+				if: (object does: value understand?: "serializeFields") {
+					toEncode <- value serializeFields
+				} else: {
+					toEncode <- object propertiesOf: value
+				}
+				parts <- #[]
+				foreach: toEncode :idx field {
+					fieldVal <- object sendMessage: field to: value
+					parts append: (field jsonEncode) . ":" . (encode: fieldVal)
+				}
+				"{" . (parts join: ",") . "}"
+			}
+		}
+
+		main <- {
+			o <- #{
+				foo <- "bar"
+				baz <- ["fizz" "buzz" "buzzzz"]
+				qux <- ((dict hash) set: "fo" "shizzle") set: "my" "nizzle"
+				arr <- #["pirate" "booty"]
+			}
+			print: (encode: o) . "\n"
+			0
+		}
 	}
 }