こんにちは、次の文字列から番号を取得するにはどうすればよいですか?
{"number":100,"data":[test]}
数値の長さは任意です。
次のコードを使用しました。しかし、エラーメッセージが表示されます
strValue.Substring((strValue.IndexOf(":")+1), (strValue.IndexOf("data")));
出力は次のようになります
100,"データ":[
ありがとう、
入力文字列は JSON のようです。それは...ですか?その場合、JSON.NETなどの適切な JSON パーサー ライブラリを使用する必要があります。
あなたの試みは近いです。私が見つけた2つ(おそらく3つの問題)があります。
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":
注: このソリューションは、文字列内のリストの最後のエントリである場合は処理しませんが、その中の他のすべての配置を処理する必要があります。
文字列がより複雑になる場合は、正規表現を使用して検索を実行してみてください。
ジョンが指摘したように、入力文字列は逆シリアル化する必要がある 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 スプリングをそのように解析することは、すべてがハードコーディングされているため、非常に悪い習慣です。Newtonsoft JSONなど、JSON 文字列を解析するためにサードパーティのライブラリを使用したことがありますか。
IndexOf(",") の代わりに IndexOf("data") を使用する必要があったと思います