public void Parse_WhenApplyToObjectLiteral_ReturnsObjectJsonObject() { // Arrange var p = new JsonParser(); // Act IJsonObject r0 = p.Parse(Input.FromString("{}")); IJsonObject r1 = p.Parse(Input.FromString(" {} ")); IJsonObject r2 = p.Parse(Input.FromString("{ foo:\"bar\" }")); IJsonObject r3 = p.Parse(Input.FromString("{'foo' : \"bar\", baz: true}")); IJsonObject r4 = p.Parse(Input.FromString(" {\"foo\" : 'bar' ,baz:true} ")); IJsonObject r5 = p.Parse(Input.FromString(" {\"foo\": {\"bar\": {\"baz\": null}}} ")); // Assert Assert.That(r0.Properties.Count(), Is.EqualTo(0)); Assert.That(r1.Properties.Count(), Is.EqualTo(0)); Assert.That(r2.Properties.Count(), Is.EqualTo(1)); Assert.That(r3.Properties.Count(), Is.EqualTo(2)); Assert.That(r4.Properties.Count(), Is.EqualTo(2)); Assert.That(r4.GetProperty("foo").AsString(), Is.EqualTo("bar")); Assert.That(r4.GetProperty("baz").AsBoolean(), Is.True); Assert.That(r5.Properties.Count(), Is.EqualTo(1)); Assert.That(r5.GetProperty("foo") .GetProperty("bar") .GetProperty("baz") .TypeIs(JsonObjectType.Null), Is.True); }
public static void Main(string[] args) { // 1. Read JSON // JsonObject.FromXxxx methods read JSON from String, File and Stream. IJsonObject j1 = JsonObject.FromString("{foo: 123, bar: true, baz: \"hello\"}"); // IJsonObject#GetProperty() accesses JSON object's property. // NOTE: GetPropery() and XxxxValue() methods have another version // that can be specified fallback value. Console.WriteLine("j1 = {0}", j1); Console.WriteLine("foo = {0}", j1.GetProperty("foo").AsNumber()); Console.WriteLine("bar = {0}", j1.GetProperty("bar").AsBoolean()); Console.WriteLine("baz = {0}", j1.GetProperty("baz").AsString()); Console.WriteLine("baa exists? = {0}", j1.HasProperty("baa")); // 2. Build JSON // JsonObject.Builder() returns new builder instance. IJsonObject j2 = JsonObject .Builder() .Append("foo", "hello") .Append("bar", "hello", "bonjour", "こんにちは") .Append("baz", (b) => { // Lambda's argument is new builder // instance for nested object. b.Append("bazProp1", 1); b.Append("bazProp2", 2); }) .Build(); // The builder can be initialized with existed JSON. IJsonObject j3 = JsonObject .Builder(j2).Append("baa", 123).Build(); Console.WriteLine("j2 = {0}", j2); Console.WriteLine("j3 = {0}", j3); // 3. Format JSON IJsonFormatOptions opts = JsonFormatOptions .Builder() .Indent(true).SoftTabs(true).TabWidth(2) .Build(); Console.WriteLine("j3' = {0}", j3.Format(opts)); }
public void GetProperty_ThrowsException() { // Arrange IJsonObject json = JsonObject.Of(true); // Act // Assert Assert.Throws <ApplicationException>(() => { json.GetProperty("foo"); }); }
public void GetProperty_WhenPropertyDoesNotExist_ThrowsException() { // Arrange IJsonObject json0 = JsonObject.FromString("{}"); IJsonObject json1 = JsonObject.FromString("{a:'abc',b:123,c:true,d:null,e:[],f:{}}"); // Act // Assert Assert.Throws <ApplicationException>(() => json0.GetProperty("foo")); Assert.DoesNotThrow(() => json1.GetProperty("a")); Assert.DoesNotThrow(() => json1.GetProperty("b")); Assert.DoesNotThrow(() => json1.GetProperty("c")); Assert.DoesNotThrow(() => json1.GetProperty("d")); Assert.DoesNotThrow(() => json1.GetProperty("e")); Assert.DoesNotThrow(() => json1.GetProperty("f")); Assert.Throws <ApplicationException>(() => json1.GetProperty("g")); }
public void GetProperty_WhenPropertyExists_ReturnsTheProperty() { // Arrange IJsonObject json1 = JsonObject.FromString("{a:'abc',b:123,c:true,d:null,e:[],f:{}}"); // Act // Assert Assert.That(json1.GetProperty("a").AsString(), Is.EqualTo("abc")); Assert.That(json1.GetProperty("b").AsNumber(), Is.EqualTo(123)); Assert.That(json1.GetProperty("c").AsBoolean(), Is.EqualTo(true)); Assert.That(json1.GetProperty("d").TypeIs(JsonObjectType.Null), Is.True); Assert.That(json1.GetProperty("e").AsArray().Count, Is.EqualTo(0)); Assert.That(json1.GetProperty("f").TypeIs(JsonObjectType.Object), Is.True); }