2014-06-10 72 views
0

我使用VS2010用C#4.我有JSON類似以下內容:如何將JSON值轉換爲字符串數組?

{"ItemDetails":{"Item":{"val": [ 
{"Description":"Desk1","Amount":"100.00"}, 
{"Description":"Desk2","Amount":"200.00"}, 
{"Description":"Desk3","Amount":"300.00"}]}}} 

我想所有的量值爲一個字符串數組像什麼如下所示:

amount={100.00,200.00,300.00} 

我怎麼能實現這個?我是否必須通過JSON對象進行循環,或者有另一種方法來執行此操作?

+0

是你的工作是什麼平臺上? Windows 8具有API,在其他平臺上,您可能會使用Newtonsoft的JSON.Net。 - >我從你添加的「VS2010」開始,回答你沒有爲Windows 8開發的問題。然後使用JSON.NET Nuget包。 –

+1

在發佈這樣的常見問題之前搜索這個網站,有很多結果就像http://stackoverflow.com/questions/17617594/how-to-get-some-values-from-a-json-string-in -c本身包含很多人的幫助 –

+0

「我必須循環訪問Josn對象」 - >您可以使用Linq查詢。但是這是關於Linq還是關於JSON解析的問題?請更精確。 –

回答

-1

我假設你沒有使用JSON.NET。如果是這種情況,那麼你可以試試它。

它具有以下特點 -

的LINQ to JSON 的JsonSerializer快速轉換您的.NET對象,JSON,然後再返回 Json.NET可以選擇性地產生良好的格式化,縮進JSON用於調試或顯示 屬性比如JsonIgnore和JsonProperty可以添加到一個類中以定製一個類的序列化方式 將JSON轉換爲XML的能力 支持多種平臺:.NET,Silverlight和Compact Framework 請看下面的例子。

在此example中,JsonConvert對象用於將對象轉換爲JSON或從JSON轉換對象。它有兩個靜態方法用於此目的。他們是SerializeObject(obj對象)和DeserializeObject(JSON字符串) -

Product product = new Product(); 
product.Name = "Apple"; 
product.Expiry = new DateTime(2008, 12, 28); 
product.Price = 3.99M; 
product.Sizes = new string[] { "Small", "Medium", "Large" }; 

string json = JsonConvert.SerializeObject(product); 
//{ 
// "Name": "Apple", 
// "Expiry": "2008-12-28T00:00:00", 
// "Price": 3.99, 
// "Sizes": [ 
// "Small", 
// "Medium", 
// "Large" 
// ] 
//} 

產品deserializedProduct = JsonConvert.DeserializeObject(JSON);

+0

-1這不回答這個問題。鑑於問題中的JSON,你會如何將'Amount'值存入數組? –

+0

我明白了你的觀點,但我只是試圖給他一個例子來使用它 –

0

我會推薦使用NewtonSofts JSON庫,但另一種(但醜陋的)方法是使用正則表達式。

var json = "{\"ItemDetails\":{\"Item\":{\"val\": [ " + 
         "{\"Description\":\"Desk1\",\"Amount\":\"100.00\",}," + 
         "{\"Description\":\"Desk2\",\"Amount\":\"200.00\",}," + 
         "{\"Description\":\"Desk3\",\"Amount\":\"300.00\"}}}"; 


// What I think you want 
var amount = Regex.Matches(json, "Amount\":\"(.*?)\"").Cast<Match>().Select(m => m.Groups[1].Value).ToArray(); 

// Values 'converted' to json 
var jsonAmount = "amount={" + string.Join(",", amount) + "}"; 
+0

如果JSON中有空白,該怎麼辦? –

+0

然後它就不會像現在這樣工作。您需要在模式中添加對該功能的支持。添加「\ s」以忽略某些地方的空格。像:Amount \「\ s:\ s \」(。*?)\「。 但是就像我說過的,我會推薦使用NewtonSofts JSON庫或其他JSON庫 否則你有。NET的JavaScriptSerializer,但這不是一個很好的。還沒有,至少:http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx – Sasse

+0

同意,使用正則表達式來解析JSON並不是一個好主意。使用合適的解析器更好。 –

0

使用Json.Net您可以用LINQ-to-JSON查詢做到這一點:

string json = @" 
{ 
    ""ItemDetails"": { 
     ""Item"": { 
      ""val"": [ 
       { 
        ""Description"": ""Desk1"", 
        ""Amount"": ""100.00"" 
       }, 
       { 
        ""Description"": ""Desk2"", 
        ""Amount"": ""200.00"" 
       }, 
       { 
        ""Description"": ""Desk3"", 
        ""Amount"": ""300.00"" 
       } 
      ] 
     } 
    } 
}"; 

JToken token = JToken.Parse(json); 
string[] amounts = token.SelectToken("ItemDetails.Item.val") 
         .Children() 
         .Select(t => t["Amount"].ToString()) 
         .ToArray(); 

Console.WriteLine("amount={" + string.Join(",", amounts) + "}"); 

輸出:

amount={100.00,200.00,300.00} 
相關問題