Created
August 22, 2023 14:23
-
-
Save zinark/48ed2cd95901d7a5123e8987251caa24 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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