This commit is contained in:
purifetchi 2025-03-09 19:28:30 +01:00
parent 737e013ecf
commit 095527ea81
9 changed files with 65278 additions and 0 deletions

View file

@ -0,0 +1,13 @@
paths:
source_folder: 'Assets/'
json_source_file: 'data.json'
yaml_source_file: 'data.yaml'
json_destination_file: 'data_mod2.json'
yaml_destination_file: 'data_ymod2.yaml'
launch:
operations:
- 'deserialize'
- 'serialize'
- 'convert'
source: 'file'

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,18 @@
using YamlDotNet.System.Text.Json;
namespace IS_Lab2_JSON_CS;
public static class ConvertJsonToYaml
{
public static void Run(DeserializeJson deserializeJson, string dest)
{
var yaml = YamlConverter.Serialize(deserializeJson.Data.RootElement);
File.WriteAllText(dest, yaml);
}
public static void Run(string source, string dest)
{
var deserialized = new DeserializeJson(source);
Run(deserialized, dest);
}
}

View file

@ -0,0 +1,54 @@
using System.Text.Json;
namespace IS_Lab2_JSON_CS;
public class DeserializeJson
{
public JsonDocument Data { get; set; }
public DeserializeJson(string filename)
{
var text = File.ReadAllText(filename);
Data = JsonDocument.Parse(text);
}
public void SomeStats()
{
var exampleStat = 0;
var voivodeships = new Dictionary<string, Dictionary<string, int>>();
foreach (var obj in Data.RootElement.EnumerateArray())
{
var voivodeshipName = obj.GetProperty("Województwo")
.GetString()!;
var jstType = obj.GetProperty("typ_JST")
.GetString()!;
if (!voivodeships.TryGetValue(voivodeshipName, out var voivodeshipDict))
{
voivodeshipDict = new Dictionary<string, int>();
voivodeships[voivodeshipName] = voivodeshipDict;
}
voivodeshipDict.TryGetValue(jstType, out var amount);
voivodeshipDict[jstType] = amount + 1;
if (jstType == "GM" &&
voivodeshipName.Equals("dolnośląskie", StringComparison.InvariantCultureIgnoreCase))
{
exampleStat += 1;
}
}
Console.WriteLine($"Liczba urzędów miejskich w województwie dolnośląskim: {exampleStat}");
foreach (var voivodeshipPair in voivodeships)
{
Console.WriteLine($"Województwo {voivodeshipPair.Key}: ");
foreach (var typePair in voivodeshipPair.Value)
{
Console.WriteLine($"\t- {typePair.Key}: {typePair.Value}");
}
}
}
}

View file

@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="YamlDotNet" Version="16.3.0" />
<PackageReference Include="YamlDotNet.System.Text.Json" Version="1.6.5" />
</ItemGroup>
<ItemGroup>
<Folder Include="Assets\" />
</ItemGroup>
<ItemGroup>
<None Update="Assets\basic_config.yaml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\data.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>

View file

@ -0,0 +1,16 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IS_Lab2_JSON_CS", "IS_Lab2_JSON_CS.csproj", "{149E3136-E2CA-441B-B4C5-2F260E5DF5E2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{149E3136-E2CA-441B-B4C5-2F260E5DF5E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{149E3136-E2CA-441B-B4C5-2F260E5DF5E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{149E3136-E2CA-441B-B4C5-2F260E5DF5E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{149E3136-E2CA-441B-B4C5-2F260E5DF5E2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,66 @@
// See https://aka.ms/new-console-template for more information
using IS_Lab2_JSON_CS;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
var serializer = new DeserializerBuilder()
.WithNamingConvention(UnderscoredNamingConvention.Instance)
.Build();
DeserializeJson newDeserializer = null!;
var config = serializer.Deserialize<YamlConfig>(File.ReadAllText("Assets/basic_config.yaml"));
var operations = new Dictionary<string, Action<string>>()
{
{ "deserialize", Deserialize },
{ "serialize", Serialize },
{ "convert", Convert }
};
foreach (var op in config.Launch.Operations)
{
if (!operations.TryGetValue(op, out var callback))
continue;
callback(config.Launch.Source);
}
void Deserialize(string src)
{
newDeserializer = new DeserializeJson($"{config.Paths.SourceFolder}{config.Paths.JsonSourceFile}");
newDeserializer.SomeStats();
}
void Serialize(string src)
{
switch (src)
{
case "object":
SerializeJson.Run(newDeserializer, $"{config.Paths.SourceFolder}{config.Paths.JsonDestinationFile}");
return;
case "file":
SerializeJson.Run($"{config.Paths.SourceFolder}{config.Paths.JsonSourceFile}", $"{config.Paths.SourceFolder}{config.Paths.JsonDestinationFile}");
return;
default:
throw new ArgumentOutOfRangeException(nameof(src));
}
}
void Convert(string src)
{
switch (src)
{
case "object":
ConvertJsonToYaml.Run(newDeserializer, $"{config.Paths.SourceFolder}{config.Paths.YamlDestinationFile}");
return;
case "file":
ConvertJsonToYaml.Run($"{config.Paths.SourceFolder}{config.Paths.JsonSourceFile}", $"{config.Paths.SourceFolder}{config.Paths.YamlDestinationFile}");
return;
default:
throw new ArgumentOutOfRangeException(nameof(src));
}
}

View file

@ -0,0 +1,38 @@
using System.Text;
using System.Text.Encodings.Web;
using System.Text.Json;
using System.Text.Unicode;
namespace IS_Lab2_JSON_CS;
public static class SerializeJson
{
public static void Run(DeserializeJson deserializeJson, string fileLocation)
{
var list = new List<object>();
foreach (var obj in deserializeJson.Data.RootElement.EnumerateArray())
{
list.Add(new
{
Kod_TERYT = obj.GetProperty("Kod_TERYT"),
Województwo = obj.GetProperty("Województwo"),
Powiat = obj.GetProperty("Powiat"),
typ_JST = obj.GetProperty("typ_JST"),
nazwa_urzędu_JST = obj.GetProperty("nazwa_urzędu_JST"),
miejscowość = obj.GetProperty("miejscowość"),
telefon_z_numerem_kierunkowym = $"{obj.GetProperty("telefonkierunkowy").ToString().Trim()}{obj.GetProperty("telefon").ToString().Trim()}"
});
}
File.WriteAllText(fileLocation, JsonSerializer.Serialize(list, new JsonSerializerOptions(JsonSerializerOptions.Default)
{
Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
}), Encoding.UTF8);
}
public static void Run(string origin, string fileLocation)
{
var deserialized = new DeserializeJson(origin);
Run(deserialized, fileLocation);
}
}

View file

@ -0,0 +1,22 @@
namespace IS_Lab2_JSON_CS;
public class YamlConfig
{
public class PathsConfig
{
public string SourceFolder { get; set; } = null!;
public string JsonSourceFile { get; set; } = null!;
public string YamlSourceFile { get; set; } = null!;
public string JsonDestinationFile { get; set; } = null!;
public string YamlDestinationFile { get; set; } = null!;
}
public class LaunchConfig
{
public string[] Operations { get; set; } = null!;
public string Source { get; set; } = null!;
}
public PathsConfig Paths { get; set; } = null!;
public LaunchConfig Launch { get; set; } = null!;
}