Получение данных Json из API и отображение только части JSON в Unity C # - PullRequest
0 голосов
/ 07 февраля 2019

У меня проблемы с получением только значения цены от этого API .Мне не нужен весь JSON, который приходит с веб-URL, мне нужна только часть "rate":"3,394.2033".

Данные API:

{
  "time": {
    "updated": "Feb 6, 2019 22:02:00 UTC",
    "updatedISO": "2019-02-06T16:02:00-06:00",
    "updateduk": "Feb 6, 2019 at 22:02 GMT"
  },
  "disclaimer": "This data was produced from the CoinDesk Bitcoin Price Index (USD). Non-USD currency data converted using hourly conversion rate from openexchangerates.org",
  "bpi": {
    "USD": {
      "code": "USD",
      "rate": "3,394.2033",
      "description": "United States Dollar",
      "rate_float": 3394.2033
    },
    "XBT": {
      "code": "XBT",
      "rate": "1.0000",
      "description": "Bitcoin",
      "rate_float": 1
    }
  }
}

Мой код:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class API : MonoBehaviour
{
    private string www = 
    "https://api.coindesk.com/v1/bpi/currentprice/XBT.json";
    public Text responseText;

    public void Request()
    {
        WWW request = new WWW(www);
        StartCoroutine(OnResponse(request));
    }
    private IEnumerator OnResponse(WWW req)
    {
        yield return req;

        responseText.text = req.text;
    }
}

Этот скрипт позволяет мне извлекать все данные JSON, но мне нужен только "rate":"3,394.2033".Точнее, просто значение 3,394.2033.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Используя API LINQ-to-JSON Json.Net (JTokens), вы можете сделать это с помощью одной строки кода:

var rate = (string)JToken.Parse(json).SelectToken("bpi.USD.rate");

Fiddle: https://dotnetfiddle.net/Krgejr

0 голосов
/ 07 февраля 2019

Вы также можете использовать старый, но золотой SimpleJSON от сообщества Unity

Чтобы использовать SimpleJSON в Unity, вам просто нужно скопировать файл SimpleJSON.cs в ваши проекты "plugins "в папке вашего ресурса.

и, например,

var json = JSON.Parse(req.text);
var yourText = json["bpi"]["USD"]["rate"];

Примечание для отладки

Если указанный ключ не найден ввопреки тому, что вы ожидаете, это возвращает null вместо выдачи исключения.

0 голосов
/ 07 февраля 2019

Вы можете использовать newtonsoft и следовать этому примеру здесь: https://www.newtonsoft.com/json/help/html/SerializingJSONFragments.htm

public class SearchResult
{
    public string Rate { get; set; }
}


JObject rateSearch = JObject.Parse(MyJsonText);

// get JSON result objects into a list
IList<JToken> results = rateSearch ["bpi"]["USD"].Children().ToList();

// serialize JSON results into .NET objects
IList<SearchResult> searchResults = new List<SearchResult>();
foreach (JToken result in results)
{
    // JToken.ToObject is a helper method that uses JsonSerializer internally
    SearchResult searchResult = result.ToObject<SearchResult>();
    searchResults.Add(searchResult);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...