【问题标题】:Get JSON from website then parse it in C#从网站获取 JSON,然后在 C# 中解析它
【发布时间】:2014-03-08 04:01:18
【问题描述】:

所以我需要从 1 个网站获取此 JSON 数据。 链接是直接的(我使用的是网站的 API)

问题是,文件太大了!数万行..甚至更多..

我有 Visual Studio 2013,我需要做的是在回调中下载该 JSON 数据,然后解析它以获得特定值。我正在使用 Newtonsoft.JSON 来解析它,这是我认为能够解析它的内容

var obj = JsonConvert.DeserializeObject<JContainer>(jsonText);
var value = (int)obj["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];

问题是,我如何下载所有这些数据并将其转换为 C# 类?还有其他方法吗? 非常感谢。

编辑:如果不是 JSON,我可以选择以 JSONP 和 VDF 格式下载它

这里是 JSON 数据的链接 - http://backpack.tf/api/IGetPrices/v3/?format=json&key=52f75dab4dd7b82f698b4568

【问题讨论】:

  • 我不相信您应该在互联网上共享该密钥以供所有人查看?
  • 我不认为这是一个问题。我可以随时撤销它并获得一个新的
  • K,所以不让我回答你的问题,所以......在这里:你的线程是这个已解决线程的副本。 stackoverflow.com/questions/4749639/…
  • 这也会响应错误消息 每个 API 密钥每分钟只能请求一次此页面。请在 46 秒后重试。....
  • @LukeAlderton 它在什么方面比 Json.Net 做得更好?

标签: c# json json.net


【解决方案1】:

试试restsharp。它可以让你做类似的事情

var prices = client.Execute<Prices>(request);

其中 Price 是与返回的架构匹配的类

【讨论】:

  • 为什么要投反对票?他问他如何将它加载到 c# 类中。
【解决方案2】:

看看 Brandon 发表的评论,原则上他是对的,但如果您不想,不必切换到 Newtonsoft。您只需要使用不同的 JSON.NET API

var serializer = new JsonSerializer();
using (var stream = File.OpenRead("C:\\Users\\gweakliem\\Downloads\\sotest.js"))
{
    using (StreamReader streamReader = new StreamReader(stream))
    {
        using (JsonReader reader = new JsonTextReader(streamReader))
        {
            var aThing = serializer.Deserialize<JContainer>(reader);
            var aValue = (int) aThing["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];
            Console.WriteLine("Read a value " + aValue);
        }
    }
}

如果您担心在阅读时会阻塞此线程,那么您似乎将不得不编写一些代码。我在 JsonTextReader 或 JsonSerializer 上看不到可等待的方法,所以我希望这些方法会阻塞。

现在如果你想把它变成对象,这里有几个其他的 SO 帖子:

或者this post 涵盖了一堆反序列化选项。

【讨论】:

  • 我修复了它..我编辑了我的主要帖子..我无法在 8 小时之前回答自己
【解决方案3】:

我这样做了

using (var webClient = new System.Net.WebClient())
        {
            var json = webClient.DownloadString("http://backpack.tf/api/IGetPrices/v3/?format=json&key=00a00aaa0aa0a00a000a0000");
            Newtonsoft.Json.Linq.JObject o = Newtonsoft.Json.Linq.JObject.Parse(json);
            var value = (int)o["response"]["prices"]["5021"]["6"]["0"]["current"]["value"];
            Console.WriteLine(value);
        }

谢谢大家的帮助!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-16
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2015-11-19
    • 2012-07-18
    • 2015-05-11
    相关资源
    最近更新 更多