2016-12-15 94 views
0
{ 
"Date": "2016-12-15", 
"Data": { 
    "A": 4.4023, 
    "AB": 1.6403, 
    "ABC": 2.3457 
} 
} 

我怎樣才能得到我的鑰匙A,AB,ABC到一個數組?只是按鍵沒有價值。如何從JSON對象的鍵轉換成數組?

+0

反序列化?解析呢? – Plutonix

+0

使用JavaScript:https://jsfiddle.net/n73zmLs0/ –

回答

1

你可以安裝並使用LINQ to JSON查詢性能:

var jsonString = @"{ 
    ""Date"": ""2016-12-15"", 
    ""Data"": { 
     ""A"": 4.4023, 
     ""AB"": 1.6403, 
     ""ABC"": 2.3457 
    } 
}"; 

var root = JToken.Parse(jsonString); 

var properties = root 
    // Select nested Data object 
    .SelectTokens("Data") 
    // Iterate through its children, return property names. 
    .SelectMany(t => t.Children().OfType<JProperty>().Select(p => p.Name)) 
    .ToArray(); 

Console.WriteLine(String.Join(",", properties)); // Prints A,AB,ABC 

樣品fiddle

+0

感謝您迴應;)有一個美好的週末 – cool

0

您可以使用內置的JavaScriptSerializer來反序列化爲object。在這種情況下,任何JSON對象實際上將被反序列化到IDictionary<string, object>。然後,就可以把返回object這樣的字典和(遞歸)查詢其內容,包括它的鍵和值:

var jsonString = @"{ 
    ""Date"": ""2016-12-15"", 
    ""Data"": { 
     ""A"": 4.4023, 
     ""AB"": 1.6403, 
     ""ABC"": 2.3457 
    } 
}"; 

var root = new JavaScriptSerializer().Deserialize<object>(jsonString); 

var properties = root 
    // Select nested Data object 
    .JsonPropertyValue("Data") 
    // Iterate through its children, return property names. 
    .JsonPropertyNames() 
    .ToArray(); 

Console.WriteLine(String.Join(",", properties)); // Prints A,AB,ABC 

使用擴展方法:

public static class JavaScriptSerializerObjectExtensions 
{ 
    public static object JsonPropertyValue(this object obj, string key) 
    { 
     var dict = obj as IDictionary<string, object>; 
     if (dict == null) 
      return null; 
     object val; 
     if (!dict.TryGetValue(key, out val)) 
      return null; 
     return val; 
    } 

    public static IEnumerable<string> JsonPropertyNames(this object obj) 
    { 
     var dict = obj as IDictionary<string, object>; 
     if (dict == null) 
      return null; 
     return dict.Keys; 
    } 
} 
+0

感謝DBC。祝你有美好的一天 – cool