2012-06-29 29 views
1

嗨使用字符串如何檢索數量從下面的字符串,在C#.NET

{"number":100,"data":[test]} 

的數量可以是任何長度。

我用下面的代碼。但它給和錯誤信息

strValue.Substring((strValue.IndexOf(":")+1), (strValue.IndexOf("data"))); 

輸出來像

100, 「數據」:

感謝,

+3

這看起來像一個JSON字符串的開始。是對的嗎? –

+0

什麼是錯誤信息? – StuperUser

+0

是的。錯過了其他一點。{「number」:100,「data」:test} – Joshua

回答

3

正如Jon所述,您的輸入字符串似乎是需要反序列化的JSON字符串。您可以編寫自己的解串器,或者使用現有的庫,例如Json.NET。這裏是一個例子:

string json = @"[ 
    { 
    ""Name"": ""Product 1"", 
    ""ExpiryDate"": ""\/Date(978048000000)\/"", 
    ""Price"": 99.95, 
    ""Sizes"": null 
    }, 
    { 
    ""Name"": ""Product 2"", 
    ""ExpiryDate"": ""\/Date(1248998400000)\/"", 
    ""Price"": 12.50, 
    ""Sizes"": null 
    } 
]"; 

List<Product> products = JsonConvert.DeserializeObject<List<Product>>(json); 
10

它看起來像你的輸入字符串是JSON。是嗎?如果是這樣,你應該使用正確的JSON解析器庫像JSON.NET

+0

解決根本問題的方法,而不僅僅是症狀!我想我應該閱讀使用JSON,因爲我不斷看到人們使用它。 –

+3

@JonSenchyna它像其他任何東西一樣有優點和缺點。重要的是,控制字符比XML更輕,ECMAScript可以將它當作本地對象,所以對於JavaScript和其他ECMAScript實現來說非常方便。 –

+0

+1使用JSON的最佳方法。儘管如果僅在代碼中的一種情況下解析字符串,該庫可能會有一些不必要的開銷。 – StuperUser

0

我猜你需要使用的IndexOf(「‘)的IndexOf的istead(’數據」)

3

你試圖接近。有兩個(可能是三個問題)我找到了。

  1. 您的字符串在您查找的號碼後面有一個逗號。由於您的代碼正在搜索「數據」的索引,因此您的結束索引最終會導致一個字符太遠。
  2. String.Substring(int, int)的第二參數實際上是長度,而不是結束索引。
  3. Strings are immutable in C#。正因爲如此,字符串中的成員函數都沒有實際修改其值。相反,他們返回一個新的價值。我不知道您的代碼示例是否完整,因此您可能會將SubString的返回值分配給某些內容,但如果不是,最終結果是strValue保持不變。

總體而言,您當前致電string.Substring的結果返回100,"data":[tes。 (並且據我所知,它不存儲結果)。

試試下面的代碼:

string justTheNumber = null; 
// Make sure we get the correct ':' 
int startIndex = strValue.IndexOf("\"number\":") + 9; 
// Search for the ',' that comes after "number": 
int endIndex = strValue.IndexOf(',', startIndex); 
int length = endIndex - startIndex; 
// Note, we could potentially get an ArguementOutOfRangeException here. 
// You'll want to handle cases where startPosition < 0 or length < 0. 
string justTheNumber = strValue.Substring(startIndex, length); 

注意:此方法不處理,如果"number":是在你的字符串中的列表中的最後一項,但它應該在它處理所有其他位置。

如果您的字符串變得更復雜,您可以嘗試使用Regular Expressions來執行搜索。

+0

如果你使用'strValue.IndexOf(「,」))',那會返回逗號所在的位置嗎?難道你不應該通過你想要的子串的長度嗎?像'strValue.IndexOf(「,」) - strValue.IndexOf(「:」)'。 – comecme

+0

這就是我得到的結果,除了我發現的第一個明顯的問題之外,沒有仔細檢查OP的其他問題的代碼。你100%正確。原始代碼將查找以「:」開頭的字符串,以及以下IndexOf(「,」)字符。我會馬上更新上述內容。 –

0
strValue.Substring((strValue.IndexOf(":")+1), (strValue.IndexOf(","))); 
2

以這種方式解析JSON彈簧是非常糟糕的做法,因爲一切都是硬編碼的。你有沒有使用第三方庫來解析JSON字符串,如Newtonsoft JSON