代码之家  ›  专栏  ›  技术社区  ›  Waleed

迭代Jobject键

  •  0
  • Waleed  · 技术社区  · 7 年前

    我有以下内容 JObject 作为回报 https://gate.io/api2#trade 应用程序编程接口。我如何迭代每一个单独硬币的钥匙也得到它的值。

    我试图用牛顿分析它 工作项目 这样分析:

    var coinData = JObject.Parse(@"{
        ""result"": ""true"",
        ""available"": {
            ""BTC"": ""0.83337671"",
            ""LTC"": ""94.364"",
            ""ETH"": ""0.07161"",
            ""ETC"": ""82.35029899""
        },
        ""locked"": {
            ""BTC"": ""0.0002"",
            ""YAC"": ""10.01""
        }
    }")["available"];
    
    foreach (JToken item in coinData)
    {
        item.Key
    }
    

    但是那时 JToken 不允许访问键值。我不知道如何进一步分析它。

    从gateio api接收的json:

    {
        "result": "true",
        "available": {
            "BTC": "0.83337671",
            "LTC": "94.364",
            "ETH": "0.07161",
            "ETC": "82.35029899"
        },
        "locked": {
            "BTC": "0.0002",
            "YAC": "10.01"
        }
    }
    

    编辑:在循环中迭代时,我应该用“:”中断它吗?如果我打断它并替换引号,这是有效的。

    foreach (JToken item in coinData)
    {
        var data = item.ToString().Replace("\"", String.Empty).Split(':');
    }
    

    var数据有两部分,1=>硬币名称,2=>余额。

    还有其他合法的方法吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Evk    7 年前

    JToken 是所有类型的JSON标记的基类。在您的情况下,虽然您只需要JSON属性,但是您需要按更窄的类型进行筛选。- JProperty . 您可以筛选以仅包括如下属性标记:

    foreach (var item in coinData.OfType<JProperty>()) {
        string coinName = item.Name;
        // to parse as decimal
        decimal balance = item.Value.Value<decimal>();
        // or as string
        string balanceAsString = item.Value.Value<string>();
    }
    
        2
  •  0
  •   Jon Skeet    7 年前

    我建议非常明确地期望“可用”的结果是另一个对象,方法是 JObject . 然后你可以打电话 Properties() 以获取其属性,每个属性作为 JProperty . 下面是一个完整的例子来演示:

    using System;
    using Newtonsoft.Json.Linq;
    
    class Program
    {
        public static void Main()        
        {
            string json = @"{
                'result': 'true',
                'available': {
                    'BTC': '0.83337671',
                    'LTC': '94.364',
                    'ETH': '0.07161',
                    'ETC': '82.35029899'
                },
                'locked': {
                    'BTC': '0.0002',
                    'YAC': '10.01'
                }
            }".Replace('\'', '"');
            JObject root = JObject.Parse(json);
            JObject coins = (JObject) root["available"];
            foreach (JProperty property in coins.Properties())
            {
                string name = property.Name;
                string value = (string) property.Value;
                Console.WriteLine($"Name: {name}; Value: {value}");
            }    
        }
    }