1

こんにちは、次の文字列から番号を取得するにはどうすればよいですか?

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

数値の長さは任意です。

次のコードを使用しました。しかし、エラーメッセージが表示されます

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

出力は次のようになります

100,"データ":[

ありがとう、

4

5 に答える 5

10

入力文字列は JSON のようです。それは...ですか?その場合、JSON.NETなどの適切な JSON パーサー ライブラリを使用する必要があります。

于 2012-06-29T15:54:46.963 に答える
3

あなたの試みは近いです。私が見つけた2つ(おそらく3つの問題)があります。

  1. 文字列には、探している数字の後にコンマがあります。コードは「データ」のインデックスを検索しているため、最後のインデックスは 1 文字過ぎてしまいます。
  2. String.Substring(int, int)の 2 番目のパラメーターは、実際には長さであり、終了インデックスではありません。
  3. 文字列は 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":注: このソリューションは、文字列内のリストの最後のエントリである場合は処理しませんが、その中の他のすべての配置を処理する必要があります。

文字列がより複雑になる場合は、正規表現を使用して検索を実行してみてください。

于 2012-06-29T15:55:31.667 に答える
3

ジョンが指摘したように、入力文字列は逆シリアル化する必要がある 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);
于 2012-06-29T16:02:51.140 に答える
2

JSON スプリングをそのように解析することは、すべてがハードコーディングされているため、非常に悪い習慣です。Newtonsoft JSONなど、JSON 文字列を解析するためにサードパーティのライブラリを使用したことがありますか。

于 2012-06-29T15:56:14.537 に答える
0

IndexOf(",") の代わりに IndexOf("data") を使用する必要があったと思います

于 2012-06-29T15:55:12.643 に答える