JSON.net查询JSON列表,就像它是一个

时间:2014-12-27 12:08:35

标签: c# .net json

我在列表中有多个JSON字符串。虽然它们都有不同的ID和值,但它们都具有相同的结构。

示例JSON 1:

{
   "sold":true,
   "Stock":{
      "1":{
         "id":"11",
         "amount":"1",
      },
        "2":{
        "id":"12",
        "amount":"5",
      }
   },

   "Colors":{
      "11":{
         "RGB":"255,255,255",
      },
      "12":{
         "RGB":"0,0,0",
      }
   }
}

示例JSON 2:

{
   "sold":true,
   "Stock":{
      "3":{
         "id":"13",
         "amount":"2",
      },
        "4":{
        "id":"14",
        "amount":"1",
      }
   },

   "Colors":{
      "13":{
         "RGB":"0,0,255",
      },
      "14":{
         "RGB":"255,0,0",
      }
   }
}

最后,我想用这样的东西一次解析所有这些:

JObject JS = JObject.Parse(JSON);

string ID = JS.SelectToken("Stock.2.id").ToString;
string Color = JS.SelectToken("Colors." + ID + ".RGB").ToString;

return Color;

但是现在,我只想从JSON 1和JSON 2加入“Stock”(或“Colors”),以便我可以一起查询它们。

2 个答案:

答案 0 :(得分:1)

你在这里有一个对象的数组,在这种情况下,解析数据

string[] jsonObjs = new[] { JSON1, JSON2, ... };
string jsonArray = "[" + String.Join(", ", jsonObjs.ToArray()) + "]";
JArray arr = JArray.Parse(jsonArray);

现在你可以在一个查询中查询数组中的所有对象,我对JSON.NET不太熟悉,但你的查询看起来像是

string id = arr.Children<JObject>()
               .Single(x => x.SelectToken("Stock.2.id").ToString());
string color = arr.Children<JObject>()
                  .Where(x => x.SelectToken("Colors." + id) != null)
                  .FirstOrDefault(x => x.SelectToken("Colors." + id + ".RGB").ToString());

答案 1 :(得分:-1)

你应该使用带括号的ToString()函数:

JObject JS = JObject.Parse(JSON);

string ID = JS.SelectToken("Stock.2.id").ToString();
string Color = JS.SelectToken("Colors." + ID + ".RGB").ToString();

return Color;