12

次のような JSON 文字列があります。

{
"package1": {
    "type": "envelope",
    "quantity": 1,
    "length": 6,
    "width": 1,
    "height": 4
},
"package2": {
    "type": "box",
    "quantity": 2,
    "length": 9,
    "width": 9,
    "height": 9
}
}

Json.NET LINQ to JSON 機能を使用して JSON 文字列を処理していますが、ノード/要素/キーの総数をどのように見つけることができるのか疑問に思っています (それらを何と呼ぶべきかわかりません)。ストリング。たとえば、上記の文字列には package1 と package2 が含まれているため、整数 2 を返すようにするにはどうすればよいか考えています。パッケージが 1 つしかない場合もありますが、その場合は整数 1 を返したいと考えています。 20 個のパッケージがある場合もあります (その場合、20 個を返したいと思います)。

私の JObject は次のようになります。

JObject o = JObject.Parse(myJsonString);

何か案は?助けてくれてありがとう。

4

6 に答える 6

27
JObject jObj = (JObject)JsonConvert.DeserializeObject(myJsonString);
int count = jObj.Count;

ボーナス:

dynamic jObj = JsonConvert.DeserializeObject(myJsonString);

foreach (var package in jObj)
{
    Console.WriteLine("{0} {1}", package.First.type, package.First.quantity);
}
于 2012-04-03T20:55:26.777 に答える
0

辞書型への逆シリアル化の使用:

JsonConvert.DeserializeObject<IDictionary>(myJsonString).Count

また

JsonConvert.DeserializeObject<IDictionary<string, object>>(myJsonString).Count
于 2021-12-02T15:11:32.067 に答える
0

オープン ソース ライブラリであるCinchoo ETLを使用すると、ストリーミング アプローチを使用して入力を解析するため、少ないメモリ オーバーヘッドで簡単にノード カウントを実行できます。したがって、大きなファイルも処理できます。

string json = @"{
""package1"": {
""type"": ""envelope"",
""quantity"": 1,
""length"": 6,
""width"": 1,
""height"": 4
},
""package2"": {
""type"": ""box"",
""quantity"": 2,
""length"": 9,
""width"": 9,
""height"": 9
}
}";

using (var p = ChoJSONReader.LoadText(json).WithJSONPath("$.*"))
{
    Console.WriteLine(p.Count());
}

それが役に立てば幸い。

于 2018-07-08T22:24:56.947 に答える
-2

JQuery $.ajax では、配列を受け取り、要素をトラバースして合計を取得します。

于 2012-04-03T20:50:55.140 に答える