using System.Collections.Generic;
static void Main(string[] args)
string jsonString = "{\"id\":300044537,\"name\":\"Medicina\",\"description\":\"\",\"location\":{\"lat\":44.47847875,\"lon\":11.64737228},\"firstData\":\"2024-07-27T00:00:00+02:00\",\"lastData\":\"2024-09-17T13:00:00+02:00\",\"granularity\":\"PT1H\",\"travelModes\":[\"bike\"],\"directional\":true}";
List<string> jsonFields = new List<string>{"id","name","description","location.lat","location.lon","firstData","lastData","granularity","travelModes","directional"};
Dictionary<string, string> result = ParseFormatoJson(jsonString);
string output = CostruttoreStringaOutput(result, jsonFields);
Console.WriteLine(output);
static Dictionary<string, string> ParseFormatoJson(string jsonString)
Dictionary<string, string> result = new Dictionary<string, string>();
ParseJsonRicorsivo(jsonString, ref jsonString, 0, result);
static int ParseJsonRicorsivo(string input, ref string jsonString, int i, Dictionary<string, string> result, string parentKey = "")
while (i < input.Length && input[i] != '"')
string key = input.Substring(start, i - start);
i = ParseJsonRicorsivo(input, ref jsonString, i, result, parentKey + key + ".");
else if (input[i] == '[')
List<string> values = new List<string>();
while (i < input.Length && input[i] != '"') i++;
values.Add(input.Substring(start, i - start));
if (input[i] == ',') i++;
result[parentKey + key] = string.Join(",", values);
while (i < input.Length && input[i] != ',' && input[i] != '}')
string value = input.Substring(start, i - start).Trim();
result[parentKey + key] = value;
else if (input[i] == '}')
static string CostruttoreStringaOutput(Dictionary<string, string> jsonParsato, List<string> fields)
List<string> outputValues = new List<string>();
foreach (var field in fields)
if (jsonParsato.ContainsKey(field))
outputValues.Add($"\"{jsonParsato[field]}\"");
outputValues.Add("\"\"");
return string.Join(",", outputValues);