从 API 获取 JSON 数据并在 Unity C# 中仅显示部分 json



我无法从此API获取价格值。我不需要来自 Web URL 的所有 JSON,我只需要"rate":"3,394.2033"部分。

接口数据:

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

使用 Json.Net 的 LINQ-to-JSON API (JTokens(,你可以用一行代码来完成:

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

小提琴:https://dotnetfiddle.net/Krgejr

您可以使用 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);
}

你也可以使用来自Unity社区的旧的但金色的SimpleJSON

要在 Unity 中使用 SimpleJSON,您只需将 SimpleJSON.cs 文件复制到资产文件夹内的项目"插件"文件夹中。

并做例如

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

调试注意事项

如果未找到与预期相反的给定键,则返回null而不是引发异常。

您可以使用

UnityWebRequest.Get获取JSON,然后使用库对其进行反序列化(我推荐NewtonSoft.Json(。

反序列化 JSON 后,可以从生成的对象中选择要使用的属性。

我整理了一个教程,就是这样做的,还有更多。

https://www.youtube.com/watch?v=Yp8uPxEn6Vg

相关内容

  • 没有找到相关文章

最新更新