我有一个糟糕的数据库结构,没有命名约定,表和字段名称都到处都是。我需要向一个新开发的移动应用程序提供一些这样的数据,我想至少提出一个" clean"设计移动应用程序有关表和字段名称。
为此,我正在编写将创建" nice"移动应用程序使用的json对象。我不想手动去做'#34;对'"我的数据库中每个字段的名称,我想要一个自动化的过程来执行此操作。
因此,我尝试应用的规则是:所有表和字段名称都应该在lowerCamelCase中。
e.g。
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();
}
答案 0 :(得分:1)
您可以使用此功能获取lowerCamelCase,我也可以使用它并且效果很好。
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);
}