[英]Looping through multiple JObject levels and gathering information as a string
I'm using the following code to gather Json data from a URL. 我正在使用以下代码从URL收集Json数据。
var json = new WebClient().DownloadString("http://steamcommunity.com/id/tryhardhusky/inventory/json/753/6");
JObject jo = JObject.Parse(json);
JObject ja = (JObject)jo["rgDescriptions"];
int cCount = 0;
int bCount = 0;
int eCount = 0;
foreach(var x in ja){
// I'm stuck here.
string type = (Object)x["type"];
}
CUAI.sendMessage("I found: " + ja.Count.ToString());
Everything is working well until I get to the foreach statement. 一切正常,直到我进入foreach声明。
Here is a snippet of the JSON Data. 这是JSON数据的一个片段。
{
"success": true,
"rgInventory": {
"Blah other stuff"
},
"rgDescriptions": {
"637390365_0": {
"appid": "753",
"background_color": "",
"type": "0RBITALIS Trading Card"
"175240190_0": {
"appid": "753",
"background_color": "",
"type": "Awesomenauts Trading Card"
},
"195930139_0": {
"appid": "753",
"background_color": "",
"type": "CONSORTIUM Emoticon"
}
}
}
I'm wanting to loop through each item in rgDescriptions and get the type
data as a string, Then check if it contains either background
, emoticon
or trading card
. 我想遍历rgDescriptions中的每个项目并以字符串
type
获取type
数据,然后检查它是否包含background
, emoticon
或trading card
。
I know I can use the if(type.Contains("background"))
to check what the item type is, But I'm having trouble with the foreach loop. 我知道我可以使用
if(type.Contains("background"))
检查项目类型是什么,但是我遇到了foreach循环的麻烦。
If I use foreach(JObject x in ja)
I get a cannot convert type
Error. 如果我使用
foreach(JObject x in ja)
cannot convert type
错误cannot convert type
。
If I use foreach(Object x in ja)
It comes up with a Cannot apply indexing of type object
. 如果我使用
foreach(Object x in ja)
出现Cannot apply indexing of type object
。
This error also happens when I use foreach(var x in ja)
and string type = (JObject)x["type"];
当我使用
foreach(var x in ja)
并且string type = (JObject)x["type"];
时,也会发生此错误string type = (JObject)x["type"];
Can anyone tell me what I'm doing wrong, Please? 谁能告诉我我在做什么错,请吗?
You have some errors in your JSON. 您的JSON中有一些错误。 Check it with jsonlint.com.
使用jsonlint.com进行检查。 I think it should look something like this:
我认为应该看起来像这样:
{
"success": true,
"rgInventory": {
"Blah other stuff": ""
},
"rgDescriptions": {
"637390365_0": {
"appid": "753",
"background_color": "",
"type": "0RBITALIS Trading Card"
},
"175240190_0": {
"appid": "753",
"background_color": "",
"type": "Awesomenauts Trading Card"
},
"195930139_0": {
"appid": "753",
"background_color": "",
"type": "CONSORTIUM Emoticon"
}
}
}
You can use the JProperty, JToken and the SelectToken Method to get the type: 您可以使用JProperty,JToken和SelectToken方法获取类型:
var json = new WebClient().DownloadString("http://steamcommunity.com/id/tryhardhusky/inventory/json/753/6");
JObject jo = JObject.Parse(json);
foreach (JProperty x in jo.SelectToken("rgDescriptions"))
{
JToken type = x.Value.SelectToken("type");
string typeStr = type.ToString().ToLower();
if (typeStr.Contains("background"))
{
Console.WriteLine("Contains 'background'");
}
if (typeStr.Contains("emoticon"))
{
Console.WriteLine("Contains 'emoticon'");
}
if (typeStr.Contains("trading card"))
{
Console.WriteLine("Contains 'trading card'");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.