2017-09-26 5 views
-1

En USQL je lis le fichier csv. Il s'agit de données de télémétrie, donc le fichier csv peut contenir de mauvaises données. Je lis ce fichier csv et crée JObject en USQL. Je souhaite remplacer les caractères non valides de toutes les valeurs des objets json, afin que mon script n'échoue pas en raison de données incorrectes. Je veux générer une sortie JSON.Enlever les caractères invalides de la valeur de json lors de la création de JObject en USQL

Je pense à remplacer "\\" et "\"" avec le blanc avant de créer JObject. S'il vous plaît laissez-moi savoir si c'est la bonne façon d'enlever les mauvaises données. Si quelqu'un a une meilleure solution, faites le moi savoir. . Aussi à part « \ » et « \ » » dois-je supprimer tous les autres caractères Mon code Usql est mentionné ci-dessous -

@Data= 
SELECT new JObject(
         new JProperty("Name", Name),             
         new JProperty("Description", Description)      
        ).ToString() AS Document 
FROM @InputData; 
+0

personnellement, je lirais le csv dans une table de données, puis sérialiser la datatable dans un objet json.En le lisant dans votre datatable, vous pouvez ensuite valider chaque cellule que vous lisez et utiliser une regex pour supprimer ce que vous classer comme un caractère illégal .Si vous voulez un exemple de code complet, je peux faire o Je ne suis pas directement libre pour le moment. –

+0

Je suis principalement à la recherche d'une solution USQL ou C# –

+0

Pouvez-vous fournir quelques exemples de données de sorte qu'il ressemble avant et précisément comment vous voulez qu'il s'occupe? – wBob

Répondre

0

Voici comment je le ferais Cela va construire votre DataTable puis. en utilisant JSON.Net, cela sérialiser tout pour vous, il vous suffit de créer une expression regex pour rechercher et remplacer ce que vous souhaitez supprimer.

void Main() 
{ 
    var dt = CSVtoDataTable(@"c:\temp\test.csv"); 

    foreach (DataRow row in dt.Rows) 
    foreach (DataColumn col in dt.Columns) 
    { 
     var str = row[col].ToString(); 
     row[col] = RegexReplace(str); 
    } 

    string json = JsonConvert.SerializeObject(dt); 
} 

public DataTable CSVtoDataTable(string filepath) 
{ 
    DataSet ds = new DataSet("Temp"); 

    using (OleDbConnection conn = new OleDbConnection($"Provider=Microsoft.Jet.OleDb.4.0; Data Source = {Path.GetDirectoryName(filepath)}; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"")) 
    { 
     conn.Open(); 
     OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + Path.GetFileName(filepath), conn); 
     adapter.Fill(ds); 
    } 
    return ds.Tables[0]; 

} 

public string RegexReplace(string s) 
{ 
    return Regex.Replace(s, @"\b[a-z]\w+", "*****"); 
} 
+0

Merci, nous pouvons faire comme ça, mais nous voulions connaître tous les mauvais caractères qui peuvent causer des problèmes lors de la création. JObject Ex. \ "In" test \ "ing" est un mauvais caractère –

+0

Comment le système va-t-il savoir quels sont vos mauvais caractères à moins que vous n'utilisiez une regex pour les trouver? –