.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(csv).WithFirstLineHeader())
		{
			using (var r = ChoJSONReader.LoadText(json)
				.WithField("FirstName")
				.WithField("LastName")
				.WithField("Age", fieldType: typeof(int))
				.WithField("StreetAddress", jsonPath: "$.address.streetAddress", isArray: false)
				.WithField("City", jsonPath: "$.address.city", isArray: false)
				.WithField("State", jsonPath: "$.address.state", isArray: false)
				.WithField("PostalCode", jsonPath: "$.address.postalCode", isArray: false)
				.WithField("Phone", jsonPath: "$.phoneNumber[?(@.type=='home')].number", isArray: false)
				.WithField("Fax", jsonPath: "$.phoneNumber[?(@.type=='fax')].number", isArray: false)
			)
			{
				w.Write(r);
			}
		}
		Console.WriteLine(csv.ToString());
	}
}
;