示例#1
0
        public void Flatten_Returns_ListOfTwoItems()
        {
            var flattener = new JsonFlattener();

            var items = new List <Person>
            {
                new Person("John", 18, DateTime.Now.AddYears(-18)),
                new Person("Lisa", 18, DateTime.Now.AddYears(-18).AddDays(1)),
                new Person("Barbara", 18, DateTime.Now.AddYears(-18).AddDays(-1)),
                new Person("Peter", 18, DateTime.Now.AddYears(-18).AddMinutes(5)),
                new Person("Carl", 23, DateTime.Now.AddYears(-23))
            };

            var result = flattener.Flatten(JsonSerializer.Serialize(items));

            //Assert.Equal(5, result?.Count);
            //Assert.Equal("John", result?[0]["Name"]);
            //Assert.Equal("18", result?[0]["Age"]);
            //Assert.Equal(NullValue, result?[0]["MyAddress"]);
            //Assert.Equal("[\"Red\",\"Blue\"]", result?[0]["Colours"]);
            Assert.Equal("John", result?[0].Name);
            Assert.Equal("18", result?[0].Age);
            Assert.Equal(NullValue, result?[0].MyAddress);
            Assert.Equal("[\"Red\",\"Blue\"]", result?[0].Colours);
        }
示例#2
0
 public GrainsRefreshed(KatalyeContext context, IBackgroundJobClient jobClient, JsonFlattener jsonFlattener, IMediator mediator)
 {
     _context       = context;
     _jobClient     = jobClient;
     _jsonFlattener = jsonFlattener;
     _mediator      = mediator;
 }
示例#3
0
        public void Flatten_Returns_Exception_NoJson()
        {
            var flattener = new JsonFlattener();

            var exception = Assert.ThrowsAny <Exception>(() => flattener.Flatten(""));

            Assert.Contains("The input does not contain any JSON tokens", exception.Message);
        }
        public void Fact2()
        {
            var data = JObject.Parse(File.ReadAllText(@"jsonStructure1.json"));

            var flattened = JsonFlattener.Flatten(data);

            var unflattened = JsonFlattener.Unflatten(flattened);

            Assert.True(JToken.DeepEquals(data, unflattened));
        }
        public void Fact4()
        {
            var data = JObject.Parse(File.ReadAllText(@"jsonStructure1.json"));

            var flattened = JsonFlattener.Flatten(data);

            var unflattened = JsonFlattener.Unflatten(flattened);

            _outputHelper.WriteLine(unflattened.ToString());
        }
        public void Fact3()
        {
            var data = JObject.Parse(File.ReadAllText(@"jsonStructure1.json"));

            var flattened = JsonFlattener.Flatten(data);

            foreach (var key in flattened.Keys)
            {
                _outputHelper.WriteLine($"{key}, {flattened[key]}");
            }
        }
示例#7
0
        public void Supports_empty_arrays()
        {
            var flattener = new JsonFlattener();
            var fixture   = JsonConvert.DeserializeObject <JToken>(GrainFixture);

            // Act
            var result = flattener.Flatten(fixture);

            // Assert
            result.Should().NotContainKey("SSDs");
        }
        public void GetFlattenedJsonKeyValuePair_GivenValidJsonString_ShouldReturnKeyValuePairObject()
        {
            // Arrange
            var sampleData = "{ }";

            // Act
            var result = JsonFlattener.GetFlattenedJsonKeyValuePair(sampleData);

            // Assert
            Assert.NotNull(result);
            Assert.Empty(result);
        }
示例#9
0
        public void Supports_numbers()
        {
            var flattener = new JsonFlattener();
            var fixture   = JsonConvert.DeserializeObject <JToken>(GrainFixture);

            // Act
            var result = flattener.Flatten(fixture);

            // Assert
            result.Should().ContainKey("uid")
            .WhichValue.Should().ContainSingle(x => x == 0.ToString());
        }
示例#10
0
        public void Supports_arrays()
        {
            var flattener = new JsonFlattener();
            var fixture   = JsonConvert.DeserializeObject <JToken>(GrainFixture);

            // Act
            var result = flattener.Flatten(fixture);

            // Assert
            result.Should().ContainKey("pythonpath")
            .WhichValue.Should().ContainSingle(x => x == "/usr/bin");
        }
示例#11
0
        public void Supports_nesting()
        {
            var flattener = new JsonFlattener();
            var fixture   = JsonConvert.DeserializeObject <JToken>(GrainFixture);

            // Act
            var result = flattener.Flatten(fixture);

            // Assert
            result.Should().ContainKey("ip_interfaces.br-950befb17084")
            .WhichValue.Should().HaveCount(2)
            .And.Subject.Should().Contain(x => x == "172.18.0.1");
        }
示例#12
0
        public void FlattenTest()
        {
            using var doc = JsonDocument.Parse(@"
{
   ""application"": ""hiking"",
   ""reputons"": [
       {
           ""rater"": ""HikingAsylum"",
           ""assertion"": ""advanced"",
           ""rated"": ""Marilyn C"",
           ""rating"": 0.90
        },
        {
           ""rater"": ""HikingAsylum"",
           ""assertion"": ""intermediate"",
           ""rated"": ""Hongmin"",
           ""rating"": 0.75
        }    
    ]
}
             ");

            using var expected = JsonDocument.Parse(@"
{
  ""/application"": ""hiking"",
  ""/reputons/0/rater"": ""HikingAsylum"",
  ""/reputons/0/assertion"": ""advanced"",
  ""/reputons/0/rated"": ""Marilyn C"",
  ""/reputons/0/rating"": 0.90,
  ""/reputons/1/rater"": ""HikingAsylum"",
  ""/reputons/1/assertion"": ""intermediate"",
  ""/reputons/1/rated"": ""Hongmin"",
  ""/reputons/1/rating"": 0.75
}
            ");

            JsonDocument flattenedDoc = JsonFlattener.Flatten(doc.RootElement);

            Assert.IsTrue(JsonElementEqualityComparer.Instance.Equals(flattenedDoc.RootElement, expected.RootElement));

            using JsonDocument unflattenedDoc = JsonFlattener.Unflatten(flattenedDoc.RootElement);

            var options = new JsonSerializerOptions()
            {
                WriteIndented = true
            };

            Assert.IsTrue(JsonElementEqualityComparer.Instance.Equals(unflattenedDoc.RootElement, doc.RootElement));
        }
        public void GetFlattenedJsonKeyValuePair_GivenValidJObject_ShouldReturnFlattenedJson()
        {
            // Arrange
            var sampleData = JObject.Parse(GetSimpleSampleJson());

            // Act
            var result = JsonFlattener.GetFlattenedJsonKeyValuePair(sampleData).ToList();

            // Assert
            Assert.NotEmpty(result);
            Assert.Equal("firstName", result[0].Key);
            Assert.Equal("John", result[0].Value.ToString());
            Assert.Equal("age", result[3].Key);
            Assert.Equal(25, int.Parse(result[3].Value.ToString()));
        }
示例#14
0
        public void FlattenObjectTest()
        {
            // Perform the flatten on test input 1 (this is given already in object form)
            var testResults     = JsonFlattener.Flatten(TestData.Input1);
            var expectedResults = TestData.Output1;

            // Are all result groups equal to the expected groups?
            for (int i = 0; i < testResults.Count; i++)
            {
                var testResult     = testResults[i];
                var expectedResult = expectedResults[i];

                Assert.IsTrue(testResult.RecursivelyEquals(expectedResult));
            }
        }
示例#15
0
        public async Task <ResultContainer> Upload(string path)
        {
            FileLoader fl   = new FileLoader();
            var        json = fl.Get(path);

            JsonFlattener jf       = new JsonFlattener();
            var           dataList = jf.Flatten(json);

            ParameterUploadClient puc = new ParameterUploadClient(dataList);
            await puc.Upload();

            ResultContainer result = puc.GetResults();

            return(result);
        }
        public void Fact1()
        {
            var data = JObject.Parse(File.ReadAllText(@"jsonStructure1.json"));

            var flattened = JsonFlattener.Flatten(data);

            Assert.True(flattened.ContainsKey("firstName"));
            Assert.True(flattened.ContainsKey("lastName"));
            Assert.True(flattened.ContainsKey("address.street"));
            Assert.True(flattened.ContainsKey("address.city"));
            Assert.True(flattened.ContainsKey("address.state"));
            Assert.True(flattened.ContainsKey("address.phone[0].mobile"));
            Assert.True(flattened.ContainsKey("address.phone[0].home"));
            Assert.True(flattened.ContainsKey("address.phone[0].work"));
            Assert.True(flattened.ContainsKey("address.phone[1].mobile"));
            Assert.True(flattened.ContainsKey("address.phone[1].home"));
            Assert.True(flattened.ContainsKey("address.phone[1].work"));
        }
示例#17
0
    static void FlattenAndUnflatten()
    {
        using var doc = JsonDocument.Parse(@"
{
   ""application"": ""hiking"",
   ""reputons"": [
       {
           ""rater"": ""HikingAsylum"",
           ""assertion"": ""advanced"",
           ""rated"": ""Marilyn C"",
           ""rating"": 0.90
        },
        {
           ""rater"": ""HikingAsylum"",
           ""assertion"": ""intermediate"",
           ""rated"": ""Hongmin"",
           ""rating"": 0.75
        }    
    ]
}
        ");

        using JsonDocument flattened = JsonFlattener.Flatten(doc.RootElement);

        var options = new JsonSerializerOptions()
        {
            WriteIndented = true
        };

        Console.WriteLine($"{JsonSerializer.Serialize(flattened, options)}\n");

        using JsonDocument unflattened = JsonFlattener.Unflatten(flattened.RootElement);

        var comparer = JsonElementEqualityComparer.Instance;

        Debug.Assert(comparer.Equals(unflattened.RootElement, doc.RootElement));
    }
        public void GetFlattenedTreeBundle_GivenValidJsonString_ShouldReturnFlattenedBundle()
        {
            // Arrange
            var sampleData = GetSimpleSampleJson();

            // Arrange
            var result = JsonFlattener.GetFlattenedTreeBundle(sampleData).ToList();

            // Act
            Assert.NotNull(result);
            Assert.Equal(15, result.Count);
            Assert.Equal("firstName", result[0].FullPath);
            Assert.Equal("firstName", result[0].Item);
            Assert.Equal("John", result[0].Value);
            Assert.Equal(string.Empty, result[0].Parent);
            Assert.Equal("address", result[4].Parent);
            Assert.Equal("address.streetAddress", result[4].FullPath);
            Assert.Equal("streetAddress", result[4].Item);
            Assert.Equal("21 2nd Street", result[4].Value);
            Assert.Equal("phoneNumbers[0]", result[8].Parent);
            Assert.Equal("phoneNumbers[0].type", result[8].FullPath);
            Assert.Equal("type", result[8].Item);
            Assert.Equal("home", result[8].Value);
        }
示例#19
0
    static void UnflattenAssumingObject()
    {
        using var doc = JsonDocument.Parse(@"
{
    ""discards"": {
        ""1000"": ""Record does not exist"",
        ""1004"": ""Queue limit exceeded"",
        ""1010"": ""Discarding timed-out partial msg""
    },
    ""warnings"": {
        ""0"": ""Phone number missing country code"",
        ""1"": ""State code missing"",
        ""2"": ""Zip code missing""
    }
}
        ");

        var options = new JsonSerializerOptions()
        {
            WriteIndented = true
        };

        using JsonDocument flattened = JsonFlattener.Flatten(doc.RootElement);
        Console.WriteLine("The flattened document:\n");
        Console.WriteLine($"{JsonSerializer.Serialize(flattened, options)}\n");

        Console.WriteLine("Unflatten integer tokens as array indices if possible:\n");
        using JsonDocument unflattened1 = JsonFlattener.Unflatten(flattened.RootElement,
                                                                  IntegerTokenUnflattening.TryIndex);
        Console.WriteLine($"{JsonSerializer.Serialize(unflattened1, options)}\n");

        Console.WriteLine("Always unflatten integer tokens as object names:\n");
        using JsonDocument unflattened2 = JsonFlattener.Unflatten(flattened.RootElement,
                                                                  IntegerTokenUnflattening.AssumeName);
        Console.WriteLine($"{JsonSerializer.Serialize(unflattened2, options)}\n");
    }
示例#20
0
        public void FlattenFileTest()
        {
            // Perform the flatten on test input file
            var testInput   = JsonFlattener.LoadJson(".\\testdata\\input2.json");
            var testResults = JsonFlattener.Flatten(testInput);

            // Load the expected output from file
            List <Group> expectedResults = null;

            using (StreamReader r = new StreamReader(".\\testdata\\output2.json"))
            {
                expectedResults = JsonConvert.DeserializeObject <List <Group> >(r.ReadToEnd());
            }
            Assert.IsNotNull(expectedResults);

            // Are all result groups equal to the expected groups?
            for (int i = 0; i < testResults.Count; i++)
            {
                var testResult     = testResults[i];
                var expectedResult = expectedResults[i];

                Assert.IsTrue(testResult.RecursivelyEquals(expectedResult));
            }
        }
示例#21
0
        public void Flatten_Returns_ArgumentNullException()
        {
            var flattener = new JsonFlattener();

            Assert.Throws <ArgumentNullException>(() => flattener.Flatten(null));
        }
示例#22
0
 public void Setup()
 {
     FileLoader    = new FileLoader();
     JsonFlattener = new JsonFlattener();
 }
示例#23
0
 public JObject Unflatten()
 {
     return(JsonFlattener.UnflattenJObject(Dictionary));
 }
示例#24
0
 public FlatJsonObject(JObject jsonObject, string prefix = "")
 {
     Dictionary = JsonFlattener.FlattenJObject(jsonObject, prefix);
 }