C# 在另一个JObject中解析JObject
我使用的是Json.net,这是我的Json:C# 在另一个JObject中解析JObject,c#,json,json.net,C#,Json,Json.net,我使用的是Json.net,这是我的Json: { "miner": "t1biSMuXyq5eKkP8zDPViKHF9mbS9ZFLRuF", "totalHash": 1523943880.832757, "totalShares": 4089.53223605, "networkSols": "7644579", "immature": 0.29784511, "balance": 0, "paid": 1092.22974323,
{
"miner": "t1biSMuXyq5eKkP8zDPViKHF9mbS9ZFLRuF",
"totalHash": 1523943880.832757,
"totalShares": 4089.53223605,
"networkSols": "7644579",
"immature": 0.29784511,
"balance": 0,
"paid": 1092.22974323,
"workers": {
"t1biSMuXyq5eKkP8zDPViKHF9mbS9ZFLRuF": {
"name": "t1biSMuXyq5eKkP8zDPViKHF9mbS9ZFLRuF",
"diff": 54500,
"shares": 106.44625040000004,
"invalidshares": 0,
"currRoundShares": 4082.8793454,
"currRoundTime": 0,
"hashrate": 1523943880.832757,
"hashrateString": "3.05 KSol/s",
"luckDays": "5.574",
"luckHours": "133.768",
"paid": 1092.22974323,
"balance": 0
}
},
"history": {
"t1biSMuXyq5eKkP8zDPViKHF9mbS9ZFLRuF": [
{
"time": 1516522247,
"hashrate": 1600923951.4915187
},
{
"time": 1516526867,
"hashrate": 1523943880.832757
}
]
}
}
我想在“workers”和“t1bibiusyq5ekkp8zdpvikhf9mbs9zflruf”中获取元素hashrateString,但“t1biusyq5ekp8zdpvikhf9mbs9zflruf”每次都会更改
这是我当前的代码:
String dl = webClient.DownloadString("http://hushpool.cloud/api/worker_stats?t1biSMuXyq5eKkP8zDPViKHF9mbS9ZFLRuF");
JObject json = JObject.Parse(dl);
JObject workers = JObject.Parse(JObject.Parse(dl).SelectToken("workers").First.ToString());
label7.Text = (String)json.GetValue("balance");
label8.Text = (String)json.GetValue("pending");
label9.Text = (String)json.GetValue("paid");
label10.Text = (String)workers.GetValue("hashrateString");
我试过不同的代码,但都没用。你们能帮帮我吗?因为
minerValue
不是常量,所以首先需要从json中获取它,并使用它遍历JObject
以获取hashrateString
JObject obj = JObject.Parse(json);
JObject workers = (JObject)obj.GetValue("workers");
string minerValue = obj.GetValue("miner").ToString();
JObject minerWorker = (JObject)workers.GetValue(minerValue);
string hashRate = minerWorker.GetValue("hashrateString").ToString();
更新:
根据您的注释,如果存在属性名称略有不同的场景,则可以使用以下代码获取对象:
JObject workerMiner = (JObject)workers.Properties().FirstOrDefault(p => p.Name.StartsWith(minerValue)).Value;
请记住,由于您需要处理转角/故障情况(例如,json中不存在worker或miner属性),因此此代码尚未准备好生产。这里有另一种方法可以使用jsonpath从json文本中检索
'hashratestring'
JObject obj = JObject.Parse(jsonTxt);
string name = (string)obj.SelectToken("$.workers.*.hashrateString");
Console.WriteLine(name);
输出:
3.05 KSol/s
在的工作示例中,我将json简化为基本内容,并对其进行了一些格式化,以便于理解。如果您觉得缺少什么,请将其放回原处。问题是“矿工”值与第一个工人的值不一致。在某些情况下,“矿工”值可以是:t1bibirosyq5ekp8zdpvikhf9mbs9zflruf,但“工人”中的第一个元素可以是:t1birosyq5ekp8zdpvikhf9mbs9zflruf。worker1@TomažČuk请查看更新的答案,基本上
workers
对象将被遍历,第一个属性以“t1bibirosyq5ekkp8zdpvikhf9mbs9zflruf”开头谢谢,这是我一直在找的东西!