我试图在foreach中访问ETH_MOD等的值,输出名称如ETH_MOD和最后一个值。 问题是像ETH_MOD和ETH_LTG这样的键是动态的。它们会不时变化,并且还会添加更多新对。
希望有人理解我的问题,可以提供帮助;)
在php中我正在这样做。在这里,我有"姓名"在$ key$cls = json_decode($json);
foreach ($cls as $key => $value) {
$last= transformNumber($value->last);
$bid= transformNumber($value->bid);
$ask= transformNumber($value->ask);
}
亲切的问候
{
"returnTicker": {
"ETH_MOD": {
"tokenAddr": "0x957c30ab0426e0c93cd8241e2c60392d08c6ac8e",
"quoteVolume": 401812,
"baseVolume": 2398.702,
"last": 0.005690802,
"percentChange": 0.0737,
"bid": 0.005650001,
"ask": 0.00579
},
"ETH_LTG": {
"tokenAddr": "0x0879e0c9822b75f31f0b0ed2a30be9f484a57c2f",
"quoteVolume": 35336143,
"baseVolume": 1767.741,
"last": 4.9993E-05,
"percentChange": 3.1661,
"bid": 4.65E-05,
"ask": 4.874E-05
},
"ETH_ATM": {
"tokenAddr": "0x9b11efcaaa1890f6ee52c6bb7cf8153ac5d74139",
"quoteVolume": 9114955.042,
"baseVolume": 1641.045,
"last": 0.000177983,
"percentChange": -0.0167,
"bid": 8.0009E-05,
"ask": 8.38E-05
},
"ETH_VERI": {
"tokenAddr": "0x8f3470a7388c05ee4e7af3d01d8c722b0ff52374",
"quoteVolume": 3632.34,
"baseVolume": 617.863,
"last": 0.164501,
"percentChange": -0.015,
"bid": 0.168,
"ask": 0.1695
},
"ETH_ITS": {
"tokenAddr": "0xfd784da5c740c617aafb80399fa81b86e1da99a5",
"quoteVolume": 206921.3,
"baseVolume": 124.563,
"last": 0.000506,
"percentChange": 0.3316,
"bid": 0.0002667,
"ask": 0.0005588
}
},
"trades": [],
"orders": {
"buys": [],
"sells": []
}
}

答案 0 :(得分:3)
这会给你一个提示(我把你的JSON放在rawJson字符串变量中):
using Newtonsoft.Json.Linq;//use Nuget to get Newtonsoft package
...
...
dynamic task = JObject.Parse(rawJson);
var ticker = task.returnTicker;
foreach (var pair in ticker)
{
Console.WriteLine(pair.Name); //ETH_MOD and others
Console.WriteLine(pair.Value);//JSONs with details
}
答案 1 :(得分:0)
您可以将returnTicker标记为:
[JsonProperty]
private IDictionary<string, JToken> returnTicker;
如果您想从中获取基础数据,可以将其投射到所需的对象:
foreach (var pair in returnTicker) {
if ("ETH_MOD" == pair.Key) {
MyEHT_MOD_class object = pair.Value.ToObject<MyEHT_MOD_class>();
... // use object
}
...
}
然后只使用包含所需字段的MyEHT_MOD_class对象。
如果您的对象中可能有额外的元素,并且您不想错过它,则可以将某些fild标记为:
[JsonExtensionData]
private IDictionary<string, JToken> extraStuff;
通常,声明为 JsonProperty 并使用您需要的字段。如果有一些你没有使用的新字段那么没关系,你可以检查_extraStuff并通知用户。