2016-12-06 57 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