2016-12-06 53 views
0

我有一个可怕的数据库结构,没有命名约定,表和字段名都遍布在这个地方。我需要将这些数据提供给一个新开发的移动应用程序,并且我希望至少为移动应用程序提供关于表格和字段名称的“干净”设计。将字符串转换为Javascript安全且友好的变量名称

为此,我正在编写将为移动应用程序创建“漂亮”json对象的代码。我不想手动去为数据库中的每个字段设置“正确的”名称,我想要一个自动化的过程来执行此操作。

所以我试图应用的规则是:所有表和字段名称应该在lowerCamelCase中。

例如

Apple_Cart => appleCart 
AppleCart => appleCart 
Apple__Cart => appleCart 
appleCart => appleCart 
APPLE_CART => appleCart 
Apple_Cart => appleCart 
APPLECart => appleCart (not sure about this one) 

我不希望在这里重新发明轮子,我敢肯定,要么Newtonsoft.Json或其他图书馆已经有代码来做到这一点?请有人可以告诉我一个很好的方法来将字段和表名字符串转换为json标准格式。

这是我决定,我都快要推倒重来之前多远了..

/// <summary> 
    /// Makes the json identifier. 
    /// </summary> 
    /// <param name="fieldName">Name of the field.</param> 
    /// <returns></returns> 
    private string MakeJsonIdentifier(string fieldName) 
    { 
     StringBuilder sb = new StringBuilder(fieldName); 
     while (sb.ToString().Contains("_")) 
     { 
      int posOfFirstUs = sb.ToString().IndexOf("_", StringComparison.Ordinal); 
      if (sb.ToString().Length > posOfFirstUs + 1) 
      { 
       sb[posOfFirstUs + 1] = char.ToUpperInvariant(sb.ToString()[posOfFirstUs + 1]); 
       sb.Remove(posOfFirstUs, 1); 
      } 
     } 
     return sb.ToString(); 
    } 

回答

1

您可以使用此功能来获得lowerCamelCase,我也使用它和它的工作很大。

Source code

function camelize(str) { 
    return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(letter, index) { 
    return index == 0 ? letter.toLowerCase() : letter.toUpperCase(); 
    }).replace(/\s+/g, ''); 
} 

C# 您可以使用此方法,但你必须设置分隔符。在我的情况下,我总是知道我使用了哪个分隔符。例如,如果我使用蛇的情况下,我知道分隔符将是“_”,我打电话ToCamelCase(str,"_");。另外我认为如果你有不知道数字的组合你的弦乐,很难知道什么分离器设置。

public string ToCamelCase(string str,string sep) 
    { 
     str = str.Split(new[] {sep}, StringSplitOptions.RemoveEmptyEntries) 
      .Select(s => char.ToUpperInvariant(s[0]) + s.Substring(1, s.Length - 1)) 
      .Aggregate(string.Empty, (s1, s2) => s1 + s2); 
     return str.First().ToString().ToLowerInvariant() + str.Substring(1); 
    } 
+0

is this c#?因为我正在寻找在c#土地上做到这一点 – user230910