嗨我如何从以下字符串中检索数字,
{"number":100,"data":[test]}
该数字可以是任意长度。
我使用了以下代码。但它给出了错误信息
strValue.Substring((strValue.IndexOf(":")+1), (strValue.IndexOf("data")));
输出就像
100,“数据”:[
谢谢,
看起来您的输入字符串是 JSON。是吗?如果是这样,您应该使用适当的 JSON 解析器库,如JSON.NET
你的尝试很接近。我发现了两个(可能是三个问题)。
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":
是字符串中列表中的最后一个条目,但它应该处理其中的所有其他位置。
如果您的字符串变得更复杂,您可以尝试使用正则表达式来执行搜索。
正如 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);
以这种方式解析 JSON spring 是非常糟糕的做法,因为所有内容都是硬编码的。您是否考虑过使用 3rd 方库来解析 JSON 字符串,例如Newtonsoft JSON。
我猜你需要使用 IndexOf(",") 而不是 IndexOf("data")