2017-07-18 5 views
1

キー/値ペアとして辞書に2 JTokenを追加します。 NameとCategoryValueのみを辞書のKey/Valueペアにします。だから私はこのように起動します。は、私はこれらの情報が含まれているJSONファイルを持っていると同時に

foreach (var item in json["values"]){ 
    Console.WriteLine(item["categories"]["values"] + ":" + item["Name"]}; 

私はの出力を得る:

食料品:卵

用具:最も効率的な方法は何ですか:

私の質問をスプーン直接foreachループでそれらを取得すると、辞書にこれらの情報を追加するには?

私はNewtonsoftのドキュメントをウェブサイト上で見つけるいくつかのJTokenのプロパティを使用しようとして失敗している:http://www.newtonsoft.com/json/help/html/Properties_T_Newtonsoft_Json_Linq_JToken.htm

私は文字列の分割を使用して、リストへの追加について考えているが、それはほとんど効率的かつそのあまりにも不器用です。助けてください。私が得ることができるものを大いに感謝します。前もって感謝します!

答えて

1

私は、各アイテムに複数のカテゴリがあり、同じカテゴリが複数のアイテムに表示されることを前提としていますか?その場合、辞書はDictionary<string, List<string>>で、キーはカテゴリで、値はそのカテゴリに該当するすべてのアイテムのリストになります。あなたはこの辞書を作成するために、LINQのメソッドを使用することができます。そして、

Dictionary<string, List<string>> dict = obj["values"] 
    .Select(jo => jo.SelectToken("categories.values") 
        .Select(t => new 
        { 
         Category = (string)t, 
         Name = (string)jo["Name"] 
        })) 
    .SelectMany(a => a) 
    .GroupBy(a => a.Category) 
    .ToDictionary(g => g.Key, g => g.Select(a => a.Name).ToList()); 

foreach (var kvp in dict) 
{ 
    Console.WriteLine(kvp.Key + ": " + string.Join(", ", kvp.Value)); 
} 

フィドル:https://dotnetfiddle.net/MxRqg6

+0

はどうもありがとうございました!私が必要としたもののために完全に働いた! –

+0

問題ありません。お役に立てて嬉しいです。 –

+1

問題が発生した場合は、正確に何が問題になっているのか、これまで何をしていたのか、何を期待しているのか、何を期待しているのかを詳述する[新しい質問を投稿](https://stackoverflow.com/questions/ask)あなたが現在得ている結果。 (あなたが文脈を提供する必要がある場合は、この質問/回答にリンクすることができます。)コメントは、長さと書式が制約されているため、新しい質問をする良い場所ではなく、 。それを除いて、投稿したバイリンガルのリンクは私のものと同じです。あなたの変更や注釈はありません。 –

関連する問題