Considerazioni sulla progettazione dello schema JSON per gli scalari con una proprietà di collegamento coerente

3

Sto provando a creare uno schema JSON per i risultati dell'analisi statistica basata su diverse parti di dati.

Lo schema corrente è simile a questo:

{
    // Basic key information.
    video : "http://www.youtube.com/watch?v=7uwfjpfK0jo",
    start : "00:00:00",
    end : null,

    // For results of analysis, to be populated:
    // *** This is where it gets interesting ***
    analysis : {
        game : {
            value: "Super Street Fighter 4: Arcade Edition Ver. 2012",
            confidence: 0.9725
        }
        teams : [
            {
                player : {
                    value : "Desk",
                    confidence: 0.95,
                }
                characters : [
                    {
                        value : "Hakan",
                        confidence: 0.80
                    }
                ]
            }
        ]
    }
}

Il problema sono le tuple che vengono utilizzate per memorizzare un valore e la confidenza relativa a quel valore (cioè { value : "some value", confidence : 0.85 } ), popolato dopo i risultati dell'analisi.

Questo porta a uno scorrimento di questa tupla per ogni valore. Prendi un valore completamente aggiornato dalla matrice characters :

{
    name : {
        value : "Hakan",
        confidence: 0.80
    }
    ultra : {
        value: 1,
        confidence: 0.90
    }
}

Man mano che le strutture che rappresentano i valori diventano sempre più dettagliate (e su di esse viene eseguita più analisi per cercare di determinare la fiducia dietro l'analisi), l'annidamento delle tuple aggiunge molto rumore alla struttura generale, considerando che il risultato finale (quando verificato) sarà:

{
    name : "Hakan",
    ultra : 1
}

(E ricorda che questo è solo un valore annidato)

In .NET (in cui userò per lavorare con questi dati), avrei un piccolo aiuto come questo:

public class UnknownValue<T>
{     
    T Value { get; set; }
    double? Confidence { get; set; }
}

Che poi utilizzerei in questo modo:

public class Character 
{
    public UnknownValue<Character> Name { get; set; }
}

Mentre è uguale alla rappresentazione JSON nel codice , non ha lo stesso creep perché non devo ridefinire la tupla ogni volta e gli accessor delle proprietà nascondono l'aspetto di creep. Ovviamente, questo è un confronto tra mele e arance, il precedente è code mentre il JSON è data .

C'è un modo più formalizzato / più pulito / best practice per contenere lo scorrimento di queste tuple in JSON, o è l'approccio sopra un approccio accettato per il tipo di dati che sto cercando di memorizzare (e sto solo percependo è nel modo sbagliato)?

Nota, questo è rappresentato in JSON perché alla fine andrà in un database di documenti (qualcosa come RavenDB o elasticsearch ). Sono non preoccupato di essere in grado di serializzare nell'oggetto sopra, perché posso sempre usare oggetti di trasferimento dati per facilitare l'acquisizione e l'estrazione dei dati dal mio archivio dati sottostante.

    
posta casperOne 17.08.2012 - 16:40
fonte

1 risposta

3

Potrebbe essere peggio o uguale alla situazione attuale: appiattisci la struttura dividendo i valori di confidenza in una seconda struttura speculare. È più piatto, ma più ampio.

assessment- > values- > teams- > second name="Hakan"

assessment- > confidence- > teams- > second name = 0.80

assessment: 
  {
     values: {
         game : "Super Street Fighter 4: Arcade Edition Ver. 2012".
         teams : [{ name: "desk", ultra: 2}, { name : "Hakan",  ultra : 1 }]
      },
      confidence: {
         game:  0.9725
         teams : [{ name : 0.95, ultra : 0.90 }, {name : 0.80, ultra : 0.20 }]
      }
   }
    
risposta data 10.11.2012 - 23:54
fonte

Leggi altre domande sui tag