我在列表中有多个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”),以便我可以一起查询它们。
答案 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;