Skip to content

Instantly share code, notes, and snippets.

@zinark
Created August 22, 2023 14:23
Show Gist options
  • Select an option

  • Save zinark/48ed2cd95901d7a5123e8987251caa24 to your computer and use it in GitHub Desktop.

Select an option

Save zinark/48ed2cd95901d7a5123e8987251caa24 to your computer and use it in GitHub Desktop.
private IEnumerable<string> ConvertToMarkdownTables(string response)
{
var jobj = JObject.Parse(response);
var arrays = GetAllArrays(jobj);
var tabs = new List<string>();
foreach (var a in arrays)
{
var tab = DumpTable(a);
tabs.Add(tab);
}
return tabs;
static List<JArray> GetAllArrays(JToken token)
{
List<JArray> arrays = new List<JArray>();
if (token is JArray array)
{
arrays.Add(array);
}
foreach (var child in token.Children())
{
arrays.AddRange(GetAllArrays(child));
}
return arrays;
}
static string DumpTable(JArray jArray)
{
if (!jArray.Any()) return string.Empty;
var firstObject = (JObject)jArray[0];
var headers = firstObject.Properties().Select(p => p.Name).ToList();
var tableBuilder = new StringBuilder();
tableBuilder.AppendLine("| " + string.Join(" | ", headers) + " |");
tableBuilder.AppendLine("| " + string.Join(" | ", headers.Select(h => new string('-', h.Length))) + " |");
foreach (JObject obj in jArray)
{
var values = headers.Select(h => MaxLen(obj[h]?.ToString())).ToList();
tableBuilder.AppendLine("| " + string.Join(" | ", values) + " |");
}
return tableBuilder.ToString();
}
static string MaxLen(string v)
{
if (v.Length < 100) return v;
v = v.Replace(Environment.NewLine, " ").Replace("|", " ").Substring(0, 100);
return v;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment