Итерация JObject Keys - PullRequest
       19

Итерация JObject Keys

0 голосов
/ 21 мая 2018

У меня есть следующий JObject как возврат по https://gate.io/api2#trade API.Как перебрать каждый ключ, который является отдельной монетой, также получить его значение.

Я попытался проанализировать его с помощью Newtonsoft JObject Разобрать так:

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 не дает доступа к ключевым значениям.Я не знаю, как его разобрать.

JSON получен от gateio api:

{
    "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 ]

0 голосов
/ 21 мая 2018

Я бы предложил очень явно ожидать, что результатом «доступного» будет другой объект, приведя к 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}");
        }    
    }
}
0 голосов
/ 21 мая 2018

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>();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...