2012-12-05 63 views
6

Cảm thấy như có một giải pháp One-Two hàng cho những gì tôi muốn làm: Phân tích một chuỗi như thế này:Phân tích chuỗi json này để mảng chuỗi C#

"{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}" 

Into một cái gì đó như thế này:

string[] result = { "12345", "SOME-CITY", "UK", "false" }; 

Whats cách đơn giản nhất để thực hiện việc này là gì?

Trả lời

18
string json = "{\"postalcode\":\"12345\",\"postalcity\":\"SOME-CITY\",\"country\":\"UK\",\"box\":false}"; 

var dict = new JavaScriptSerializer().Deserialize<Dictionary<string,object>>(json); 
var postalCode = dict["postalcode"]; 

//Array is also possible 
string[] result = dict.Select(kv => kv.Value.ToString()).ToArray(); 
+0

Xin chào .. phương pháp này ném một ngoại lệ khi tôi cố gắng deserialize một chuỗi json chứa nhiều đối tượng. Có cách nào để giải quyết điều đó không? – Rajesh

+0

xin vui lòng bỏ qua bình luận của tôi ở trên, các JavaScriptSerializer() DeserializeObject() phương pháp có vẻ là làm việc tốt. – Rajesh

+0

Tuyệt vời. :) nhanh chóng và gọn gàng :) '+1' từ tôi. – sebastian

2

Bạn có thể sử dụng JavaScriptSerializer để tuần tự hóa json thành đối tượng dynamic cho phép bạn truy cập các thuộc tính thông qua tên ví dụ:

var address = new JavaScriptSerializer().Deserialize<dynamic>(json); 
Console.WriteLine(address["postalcode"]); 
5

Bạn cũng có thể sử dụng newtonsoft: http://james.newtonking.com/pages/json-net.aspx

string json = @"{ 
    ""Name"": ""Apple"", 
    ""Expiry"": new Date(1230422400000), 
    ""Price"": 3.99, 
    ""Sizes"": [ 
    ""Small"", 
    ""Medium"", 
    ""Large"" 
    ] 
}"; 

JObject o = JObject.Parse(json); 

string name = (string)o["Name"]; 
// Apple 

JArray sizes = (JArray)o["Sizes"]; 

string smallest = (string)sizes[0]; 
// Small 

Tôi tìm thấy một bài liên quan: JSON to string array in C#
Lib: http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx

2

Dường như chuỗi đầu vào của bạn là một chuỗi JSON, cho bạn có thể sử dụng trình giải mã JSON nếu bạn muốn. Nếu không, bạn có thể sử dụng cụm từ thông dụng cùng với các nhóm được đặt tên như sau:

List<string> values = new List<string>(); 
List<string> keys= new List<string>(); 

string pattern = @"\""(?<key>[^\""]+)\""\:\""?(?<value>[^\"",}]+)\""?\,?"; 
foreach(Match m in Regex.Matches(input, pattern)) 
{ 
    if (m.Success) 
    { 
     values.Add(m.Groups["value"].Value); 
     keys.Add(m.Groups["key"].Value); 
    } 
} 

var result = values.ToArray(); 

Nhóm được đặt tên theo cụm từ thông dụng được biểu thị bằng (?<group-name>pattern). Trong mô hình trên, chúng tôi có hai nhóm được đặt tên: keyvalue có thể được lấy từ đối tượng Match bằng cách sử dụng chỉ mục Groups.

Các vấn đề liên quan