.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Text;
using ChoETL;

public class Program
{
	public static void Main()
	{
		string json = @"
[
    {
        ""firstName"": ""John"",
        ""lastName"": ""Smith"",
        ""age"": 25,
        ""address"": {
            ""streetAddress"": ""21 2nd Street"",
            ""city"": ""New York"",
            ""state"": ""NY"",
            ""postalCode"": ""10021""
        },
        ""phoneNumber"": [
            {
                ""type"": ""home"",
                ""number"": ""212 555-1234""
            },
            {
                ""type"": ""fax"",
                ""number"": ""646 555-4567""
            }
        ]
    },
    {
        ""firstName"": ""Tom"",
        ""lastName"": ""Mark"",
        ""age"": 50,
        ""address"": {
            ""streetAddress"": ""10 Main Street"",
            ""city"": ""Edison"",
            ""state"": ""NJ"",
            ""postalCode"": ""08837""
        },
        ""phoneNumber"": [
            {
                ""type"": ""home"",
                ""number"": ""732 555-1234""
            },
            {
                ""type"": ""fax"",
                ""number"": ""609 555-4567""
            }
        ]
    }
]";
	
		StringBuilder csv = new StringBuilder();
		using (var w = new ChoCSVWriter<Employee>(csv).WithFirstLineHeader())
		{
			using (var r = ChoJSONReader<Employee>.LoadText(json)
			)
			{
				w.Write(r);
			}
		}
		Console.WriteLine(csv.ToString());
	}
	
	public class Employee
	{
		[ChoJSONRecordField]
		public string FirstName { get; set; }
		[ChoJSONRecordField]
		public string LastName { get; set; }
		[ChoJSONRecordField]
		public int Age { get; set; }
		[ChoJSONRecordField(JSONPath = "$.address.streetAddress")]
		public string StreetAddress { get; set; }
		[ChoJSONRecordField(JSONPath = "$.address.city")]
		public string City { get; set; }
		[ChoJSONRecordField(JSONPath = "$.address.state")]
		public string State { get; set; }
		[ChoJSONRecordField(JSONPath = "$.address.postalCode")]
		public string PortalCode { get; set; }
		[ChoJSONRecordField(JSONPath = "$.phoneNumber[?(@.type=='home')].number")]
		public string Phone { get; set; }
		[ChoJSONRecordField(JSONPath = "$.phoneNumber[?(@.type=='fax')].number")]
		public string Fax { get; set; }
	}	
}
;