2017-09-26 22 views
-1

在USQL中,我正在读取csv文件。这是遥测数据,所以csv文件可能有任何不良数据。我正在读取该csv文件并在USQL中创建JObject。我想从所有json对象的值中替换无效字符,这样我的脚本就不会因为错误的数据而失败。我想要生成json输出。在USQL中创建JObject时,从json的值中删除无效字符

我想在创建JObject之前用空白替换"\\""\""。请让我知道这是否是删除不良数据的正确方法。如果有人有更好的解决方案,请告诉我。 。

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

个人而言,我会读的CSV到一个数据表,然后将数据表序列化成一个json对象,通过读入你的数据表,你可以在读取它时验证每个单元格,并使用正则表达式来删除你认为是非法字符的类。如果你想要一个完整的代码示例,我可以使o ne,因为我现在不是直接免费的。 –

+0

我主要是在寻找USQL或C#解决方案 –

+0

你能否提供一些示例数据来分析它以前的样子,以及你希望它看起来如何? – wBob

回答

0

这是我会怎么做呢?这将建立你的数据表,然后 - 也除了“\”和“\”,”我需要删除任何其他的角色我Usql代码下面提到使用JSON.Net,这将连载这一切对你来说,你只需要建立一个正则表达式查找和替换要删除什么。

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

谢谢。是的,我们可以这样做,但想知道所有可能导致问题的坏字符JObject。Ex。\“in”test \“ing”是坏字符 –

+0

系统如何知道你的坏字符是什么,除非你使用正则表达式来找到它们? –