我无法从此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