Skip to main content

Json

Wing has a dedicated type named Json for representing JSON. A Json value can be an object, but it can also be an array, string, boolean, number, or null.

main.w
let person = Json {
firstName: "John",
lastName: "Smith"
};

// stringify
log(Json.stringify(person));

// parse
log(Json.parse("\{\"firstName\":\"John\",\"lastName\":\"Smith\"}"));

// Try and parse
if let jsonFromTryParse = Json.tryParse("\{\"firstName\":\"John\",\"lastName\":\"Smith\"}") {
log("{jsonFromTryParse}");
} else {
log("failed to parse string to JSON");
}

// Deep copy of Json
let newPerson = Json.deepCopy(person);
log(Json.stringify(person));

// iterate over keys
for k in Json.keys(person) {
let value = person.get(k);
log("found key {k} with value {value}");
}

// iterate over values
for value in Json.values(person) {
log("found value {value}");
}

// iterate over array
let arrayValue = Json ["a", "b", "c"];
for v in Json.values(arrayValue) {
log(str.fromJson(v));
}

// Convert to structs
struct Foo {
val1: str;
val2: num;
}

let jFoo = {
val1: "cool",
val2: 21
};

let foo = Foo.fromJson(jFoo);
log(Json.stringify(foo));
Wing console output
# Run locally with wing console
wing it

{"firstName":"John","lastName":"Smith"}
{ firstName: 'John', lastName: 'Smith' }
{"firstName":"John","lastName":"Smith"}
{"firstName":"John","lastName":"Smith"}
found key firstName with value "John"
found key lastName with value "Smith"
found value "John"
found value "Smith"
a
b
c
{"val1":"cool","val2":21}