CSharp · Console
using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Data;
public class Program
{
public static void Main()
{
//var jsonFromAPI = "{\"api\":{\"results\":66,\"Players\":[{\"player_id\":10,\"player_name\":\"Gustavo Ferrareis\"},{\"player_id\":20,\"player_name\":\"Player Name With Id 20\"}]}}";
var jsonFromAPI = "{\"api\":{\"results\":66,\"Players\":[{\"player_id\":10,\"player_name\":\"Gustavo Ferrareis\",\"shots\":{\"total\":13, \"on\":2 }},{\"player_id\":20,\"player_name\":\"Player Name With Id 20\",\"shots\":{\"total\":13, \"on\":2 }}]}}";
var jObject = JObject.Parse(jsonFromAPI)["api"];
var players = jObject["Players"].Children();
var formattedPlayers = players
.Select(p => string.Format("Player_id: {0} - Player_name: {1}", p["player_id"], p["player_name"]));
var playersDictionary = players.Select(p => new {player_id = p["player_id"], player_name = p["player_name"]})
.ToDictionary(x => x.player_id, v => v.player_name);
Console.WriteLine(string.Join(Environment.NewLine, formattedPlayers));
Console.WriteLine(Environment.NewLine);
var allPlayerDetails = new List<Dictionary<string, object>>();
foreach (JObject player in players)
{
var playerDictionary = player.Properties()
.ToDictionary<JProperty, string, object>(property => property.Name, property => property.Value);
allPlayerDetails.Add(playerDictionary);
}
for (var index = 0; index < allPlayerDetails.Count; index++)
{
var playerDictionary = allPlayerDetails[index];
Console.WriteLine(Environment.NewLine);
Console.WriteLine(string.Format("Printing Player# {0}", index));
foreach (var d in playerDictionary)
{
Console.WriteLine(d.Key + " - " + d.Value);
}
}
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Beginning to convert list to DataTable");
DataTable dt = new DataTable();
foreach (var column in allPlayerDetails.SelectMany(p => p.Keys).Select(k => k.Trim()).Distinct())
{
dt.Columns.Add(new DataColumn(column));
}
foreach (var details in allPlayerDetails)
{
var dr = dt.NewRow();
foreach (DataColumn dc in dt.Columns)
{
dr[dc.ColumnName] = details.ContainsKey(dc.ColumnName) ? details[dc.ColumnName] : null;
}
dt.Rows.Add(dr);
}
Console.WriteLine("Completed converting list to DataTable");
}
}