Visual Studio Code: Paste JSON as Code

Questa settimana vi voglio mostrare una recente scoperta -ovviamente casuale- fatta utilizzando Visual Studio Code. Si tratta di una estensione che vi permetterà di copiare il vostro file JSON direttamente in codice sorgente. Personalmente la trovo molto comoda quando arrivano dei JSON dall’esterno e bisogna portarlo nel codice.

Paste JSON as Code

Lo scopo Paste JSON as Code è abbastanza prevedibile dal nome e se non dovesse bastare vi ho aperto l’articolo con uno spoiler a tema.

Le features principali -prese dalla pagina del marketplace- sono le seguenti

  • Interactively generate types and (de-)serialization code from JSON, JSON Schema, and TypeScript
  • Paste JSON/JSON Schema/TypeScript as code

I dettagli dell’estensione ad oggi sono i seguenti:

Proprieta’Valore
Version12.0.46
Released on23/12/2017, 21:41:40
Last updated20/9/2018, 17:48:28
Publisherquicktype

Quello che vorrei farvi notare e’ il valore legato a Last updated che per i miei gusti e’ abbastanza vecchio. L’estensione pero’ e’ davvero valida, quindi valutate voi se utilizzarla o meno. Io una volta finito di usarla ho deciso di rimuoverla.

Utilizzo

Utilizzarla e’ davvero semplice. Vi serviranno due cose.

  • Un file JSON
  • VS Code

Per semplificare il tutorial utilizzero’ un JSON minimale come il seguente.

1
2
3
4
{
  "id": 1,
  "title": "hello"
}

Ora non vi resta che copiarlo con CTRL+C ed aprire VS Code. Ed ora?

  • CTRL + SHIFT + P
  • Cercare (o scrivere) Paste JSON as Code
  • Selezionare il linguaggio in cui si desidera “trasformare” il JSON (TypeScript, Python, Go, Ruby, C#, Java, Swift, Rust, Kotlin, C++, Flow, Objective-C, JavaScript, Elm, and JSON Schema.)
  • Inserire in Top-Level type name il nome della classe (ex. MinimalDto)

Attendere qualche secondo ed avrete il seguente contenuto.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Generated by https://quicktype.io

namespace QuickType
{
    using System;
    using System.Collections.Generic;

    using System.Globalization;
    using Newtonsoft.Json;
    using Newtonsoft.Json.Converters;

    public partial class MinimalDto
    {
        [JsonProperty("id")]
        public long Id { get; set; }

        [JsonProperty("title")]
        public string Title { get; set; }
    }

    public partial class MinimalDto
    {
        public static MinimalDto FromJson(string json) => JsonConvert.DeserializeObject<MinimalDto>(json, QuickType.Converter.Settings);
    }

    public static class Serialize
    {
        public static string ToJson(this MinimalDto self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
    }

    internal static class Converter
    {
        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
        {
            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
            DateParseHandling = DateParseHandling.None,
            Converters = {
                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
            },
        };
    }
}

Ora -per quanto mi riguarda- viene fornito un risultato nettamente piu’ ampio del necessario, ma cancellare il superfluo ci vuole un secondo. Anche la rimozione di partial non e’ male a mio avviso!