2016-12-15 95 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