【问题标题】:Remove invalid characters from value of json while creating JObject in USQL在 U SQL 中创建对象时从 json 的值中删除无效字符
【发布时间】:2017-09-26 09:46:26
【问题描述】:

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

我正在考虑在创建JObject 之前将"\\""\"" 替换为空白。请让我知道这是否是删除不良数据的正确方法。如果有人有更好的解决方案,请告诉我。除了“\”和“\””之外,我还需要删除任何其他字符。下面提到了我的Usql代码-

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

【问题讨论】:

  • 就个人而言,我会将 csv 读入数据表,然后将数据表序列化为 json 对象。通过将其读入您的数据表,您可以在阅读时验证每个单元格并使用正则表达式删除您归类为非法字符的内容。如果您想要一个完整的代码示例,我可以很快为您制作一个,因为我不是直接免费的现在。
  • 我主要是找USQL或者C#方案
  • 您能否提供一些示例数据,说明它以前的样子以及您希望它以后的样子?
  • 如果 Name 有字符串 "test\"ing",那么使用我上面的代码会给你解析错误。在这种情况下,我想从该字符串中删除 \",这可能会导致问题。像 \" 我想知道可能会出现问题的所有其他字符(无效字符)并将它们替换为空白。主要是我正在查看所有列的值,例如名称和描述,因为在创建 JObject 时我有硬编码的属性名称所以属性名称不会有任何问题。我只想验证所有值并通过用空白替换坏字符来更正它们。

标签: c# json json.net u-sql


【解决方案1】:

我会这样做。这将构建您的 DataTable,然后使用 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+", "*****");
}

【讨论】:

  • 谢谢。是的,我们可以这样做,但想知道在创建 JObject 时可能导致问题的所有坏字符。前任。 "test\"ing" 中的 \" 是坏字符。
  • 除非您使用正则表达式查找它们,否则系统如何知道您的坏字符是什么?
猜你喜欢
  • 2011-07-15
  • 1970-01-01
  • 2020-12-15
  • 2017-07-09
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多